実現したいこと
Eclipse (STS4)でJavaのデバッグをする際に、「ソースが見つかりませんでした」とデバッグが停止してしまいます。
このエラーを防ぐにはどうしたらいいか教えてください。
発生している問題・エラーメッセージ
以下の部分にブレークポイントを置きデバッグをして、updateメソッドを通り過ぎると、エラーが出てきます。
その際に、「RootController$$FastClassBySpringCGLIB$$d14b0faf.inv」タブが出てきて、以下が表示されます。
@PutMapping("{id}") public ModelAndView update(@PathVariable Long id, @ModelAttribute InquiryForm inquiryform) { inquiryform.setId(id); * repository.save(inquiryform); return new ModelAndView("redirect:" + buildAdminRedirectUrl("/list")); }
・ソースが見つかりませんでした、のメッセージ
・「ソース・ルックバック・パスの編集」ボタン
- (クリックするとパスの編集画面が出てきます)
編集画面には
デフォルト
app
spring-boot-starter-thymeleaf
spring-boot-starter
spring-boot-starter-logging
などが出てきます。
(appはjavaアプリの名前です)
該当のソースコード
Java
1package com.example.demo.controllers; 2 3import org.hibernate.cache.spi.support.AbstractReadWriteAccess.Item; 4import org.springframework.beans.factory.annotation.Autowired; 5import org.springframework.stereotype.Controller; 6import org.springframework.ui.Model; 7import org.springframework.validation.BindingResult; 8import org.springframework.validation.annotation.Validated; 9import org.springframework.web.bind.annotation.GetMapping; 10import org.springframework.web.bind.annotation.PutMapping; 11import org.springframework.web.bind.annotation.ModelAttribute; 12import org.springframework.web.bind.annotation.PathVariable; 13import org.springframework.web.bind.annotation.PostMapping; 14import org.springframework.web.bind.annotation.RequestMapping; 15import org.springframework.web.bind.annotation.DeleteMapping; 16 17import com.example.demo.models.InquiryForm; 18import com.example.demo.repositries.InquiryRepository; 19import ch.qos.logback.core.joran.spi.EventPlayer; 20import java.util.List; 21import javax.transaction.Transactional; 22import com.example.demo.controllers.RedirectUrlProperties; 23import lombok.RequiredArgsConstructor; 24 25import org.springframework.web.util.UriComponentsBuilder; 26import org.springframework.web.servlet.ModelAndView; 27 28 29 30@Controller 31@RequestMapping("/") 32@Transactional //roll back at exception handling 33@RequiredArgsConstructor //making constructor that taking initialized arguments for final field 34public class RootController { 35 36 @Autowired 37 InquiryRepository repository; 38 39 public String buildAdminRedirectUrl(String url) { 40 return UriComponentsBuilder.fromUriString(redirectUrlProperties.getUrl() + url).toUriString(); 41 } 42 43 @GetMapping 44 public String index() { 45 return "root/index"; 46 } 47 48 @GetMapping("/list") //applied at viewing /list 49 public String inquiryList(Model model) { 50 List<InquiryForm> items = repository.findAll(); 51 model.addAttribute("items", items); 52 return "root/list"; 53 } 54 55 @GetMapping("/form") 56 public String form(InquiryForm inquiryForm) { 57 return "root/form"; 58 } 59 60 @PostMapping("/form") //applied at viewing /form 61 public String form(@Validated InquiryForm inquiryForm, BindingResult bindingResult, Model model) { 62 if (bindingResult.hasErrors()) { 63 return "root/form"; 64 } 65 repository.save(inquiryForm); 66 model.addAttribute("message", "お問い合わせを受け付けました。"); 67 return "root/form"; 68 } 69 70 @GetMapping("{id}/edit") //applied at id# 71 public String edit(@PathVariable Long id, Model model) { 72 InquiryForm inquiryform = repository.findById(id).get(); 73 model.addAttribute("inquiryform", inquiryform); 74 return "root/edit"; 75 } 76 77 // @Data annotation for InquiryForm class makes getter and setter 78 // STS says setId is undefined, but it works fine 79 @PutMapping("{id}") 80 public ModelAndView update(@PathVariable Long id, @ModelAttribute InquiryForm inquiryform) { 81 inquiryform.setId(id); 82 * repository.save(inquiryform); 83 return new ModelAndView("redirect:" + buildAdminRedirectUrl("/list")); 84 } 85 86 @DeleteMapping("{id}") 87 public ModelAndView destroy(@PathVariable Long id) { 88 repository.deleteById(id); 89 return new ModelAndView("redirect:" + buildAdminRedirectUrl("/list")); 90 } 91}
Java
1public class ModelAndView { 2 3 @Nullable 4 private Object view; 5 6 @Nullable 7 private ModelMap model; 8 9 @Nullable 10 private HttpStatus status; 11 12 private boolean cleared = false; 13 14 public ModelAndView() { 15 } 16 17 public ModelAndView(String viewName) { 18 this.view = viewName; 19 } 20 21 public ModelAndView(View view) { 22 this.view = view; 23 } 24 25 public ModelAndView(String viewName, @Nullable Map<String, ?> model) { 26 this.view = viewName; 27 if (model != null) { 28 getModelMap().addAllAttributes(model); 29 } 30 } 31 32 public ModelAndView(View view, @Nullable Map<String, ?> model) { 33 this.view = view; 34 if (model != null) { 35 getModelMap().addAllAttributes(model); 36 } 37 } 38 39 public ModelAndView(String viewName, HttpStatus status) { 40 this.view = viewName; 41 this.status = status; 42 } 43 44 public ModelAndView(@Nullable String viewName, @Nullable Map<String, ?> model, @Nullable HttpStatus status) { 45 this.view = viewName; 46 if (model != null) { 47 getModelMap().addAllAttributes(model); 48 } 49 this.status = status; 50 } 51 52 public ModelAndView(String viewName, String modelName, Object modelObject) { 53 this.view = viewName; 54 addObject(modelName, modelObject); 55 } 56 57 public ModelAndView(View view, String modelName, Object modelObject) { 58 this.view = view; 59 addObject(modelName, modelObject); 60 } 61 62 63 public void setViewName(@Nullable String viewName) { 64 this.view = viewName; 65 } 66 67 @Nullable 68 public String getViewName() { 69 return (this.view instanceof String ? (String) this.view : null); 70 } 71 72 public void setView(@Nullable View view) { 73 this.view = view; 74 } 75 76 @Nullable 77 public View getView() { 78 return (this.view instanceof View ? (View) this.view : null); 79 } 80 81 public boolean hasView() { 82 return (this.view != null); 83 } 84 85 public boolean isReference() { 86 return (this.view instanceof String); 87 } 88 89 @Nullable 90 protected Map<String, Object> getModelInternal() { 91 return this.model; 92 } 93 94 public ModelMap getModelMap() { 95 if (this.model == null) { 96 this.model = new ModelMap(); 97 } 98 return this.model; 99 } 100 101 public Map<String, Object> getModel() { 102 return getModelMap(); 103 } 104 105 public void setStatus(@Nullable HttpStatus status) { 106 this.status = status; 107 } 108 109 @Nullable 110 public HttpStatus getStatus() { 111 return this.status; 112 } 113 114 115 public ModelAndView addObject(String attributeName, @Nullable Object attributeValue) { 116 getModelMap().addAttribute(attributeName, attributeValue); 117 return this; 118 } 119 120 public ModelAndView addObject(Object attributeValue) { 121 getModelMap().addAttribute(attributeValue); 122 return this; 123 } 124 125 public ModelAndView addAllObjects(@Nullable Map<String, ?> modelMap) { 126 getModelMap().addAllAttributes(modelMap); 127 return this; 128 } 129 130 131 public void clear() { 132 this.view = null; 133 this.model = null; 134 this.cleared = true; 135 } 136 137 public boolean isEmpty() { 138 return (this.view == null && CollectionUtils.isEmpty(this.model)); 139 } 140 141 public boolean wasCleared() { 142 return (this.cleared && isEmpty()); 143 } 144 145 146 @Override 147 public String toString() { 148 return "ModelAndView [view=" + formatView() + "; model=" + this.model + "]"; 149 } 150 151 private String formatView() { 152 return isReference() ? "\"" + this.view + "\"" : "[" + this.view + "]"; 153 } 154 155}
試したこと
デバッグ時の「ソースが見つかりませんでした」の対処法を参考に、上記の「ソース・ルックバック・パスの編集」からJavaアプリ全体を追加しましたが、同じエラーが出てきます。
追加後の編集画面はこうなってます。
app
java - /app/src/main
resources - /app/src/main
java - /app/src/test
annotations - /app/target/generated-sources
test-annotations - /app/target/generated-test-sources
デフォルト
app
spring-boot-starter-thymeleaf
spring-boot-starter
spring-boot-starter-logging
などが出てきます。
補足情報(FW/ツールのバージョンなど)
SpringToolSuite4
java 11.0.15 2022-04-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.15+8-LTS-149)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.15+8-LTS-149, mixed mode)
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。