Проблема наследования Spring Bean и исключения из нулевого указателя
Я работаю над добавлением нового компонента в бизнес-объект.
Для этого я сначала добавляю член в класс PurchaseOrderDocument, назначая ему следующее:
protected String purchaseOrderCurrentCMActionStatus;
Затем, конечно, я назначаю ему обычный метод получения и установки следующим образом:
public String getPurchaseOrderCurrentCMActionStatus() {
return purchaseOrderCurrentCMActionStatus;
}
public void setPurchaseOrderCurrentCMActionStatus(String purchaseOrderCurrentCMActionStatus) {
this.purchaseOrderCurrentCMActionStatus = purchaseOrderCurrentCMActionStatus;
}
Итак, все это происходит в моем классе Java.
Итак, теперь в соответствующий XML-файл с именем PurchaseOrderDocument.xml, расположенный в каталоге DataDictionary, я добавил следующее определение bean-компонента:
<bean id="PurchaseOrderDocument-purchaseOrderCurrentCMActionStatus"
parent="PurchaseOrderDocument-purchaseOrderCurrentCMActionStatus-parentBean"/>
<bean id="PurchaseOrderDocument-purchaseOrderCurrentCMActionStatus-parentBean" abstract="true" parent="AttributeDefinition">
<property name="name" value="purchaseOrderCurrentCMActionStatus"/>
<property name="label" value="Current CM Action Status"/>
<property name="required" value="false"/>
<property name="shortLabel" value="CM Status"/>
<property name="control">
<ref bean="HiddenControl"/>
</property>
</bean>
Далее мне нужно создать отображение OJB, поэтому в файл ojb.xml я добавил следующую строку кода XML:
<field-descriptor name="purchaseOrderCurrentCMActionStatus" column="CURR_CM_ACTION_STATUS" jdbc-type="VARCHAR"/>
Я также создал столбец CURR_CM_ACTION_STATUS в своем соответствующем TABLE - поэтому я дважды и трижды проверил, что имена совпадают.
Правильно -
Итак, вот вопрос: внутри моего PurchaseOrderDocument у меня есть триггер, который ожидает события, которое сработает из кода "Setter", который я указал выше для этого компонента. Странно то, что этот код, который я написал, генерирует исключение NULL Pointer Exception.
Я указал проблему на следующую строку -
<bean id="PurchaseOrderDocument-purchaseOrderCurrentCMActionStatus-parentBean" abstract="true" parent="AttributeDefinition">
Если я изменю следующую строку:
parent = "AttributeDefinition"
в
parent = "Note-noteText"
(Примечание - это класс, а noteText - это элемент-член, который я ОРИГИНАЛЬНО имел в этом bean-компоненте, от которого я наследовал, - но я больше не хочу наследовать от класса Note, я хочу, чтобы он был локальным для моего класса PurchaseOrderDocument. В любом случае, когда У меня там был Note-noteText, я НЕ получил исключение нулевого указателя, а, скорее, после того, как мой триггер вызвал метод "set", в базу данных НИЧЕГО не было записано, что случайно является ORACLE.)
Таким образом, это моя причина отойти от наследования, и вместо этого я хочу, чтобы этот компонент был локальным для ЭТОГО класса.
Мой коллега упомянул, что, возможно, Spring ищет этот боб в FORM, и, поскольку у меня его там нет - его тошнит... но у меня есть сомнения.
Также обратите внимание, что я использую скрытый контроль. Когда я добавил текст parent = "AttributeDefinition", я получил сообщение о том, что не указал атрибут управления. Так как этот бин получает свое содержимое НЕ от ввода USER, я указал этот атрибут HIDDEN CONTROL.
Может быть, это часть проблемы??
Вот трассировка стека на всякий случай -
Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException (JspServletWrapper.java:521) org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:4let.Jerlet.service.servserserserserserserserserserserserserserserserver).service.service.servserserserser.dll JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.struts.orcess.action doForward(RequestProcessor.java:1085) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.kuali.rice.kns.web.struts.action.KualiRequestProcessor.process(KualiRequestProcessor.java:101) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doGlet(ActionServer. Java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.kuali.rice.kew.web.UserLoginFilter.doFilter(UserLoginFilter.java:92) org.jasig.cas.client.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter. doFilter(AbstractTicketValidationFilter.java:167) org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:121) org.kuali.rice.kns.web.filter.SetResponseBilfferFFF org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) org.kuali.rice.kns.web.filter.SessionFilter.doFilter(SessionFilter.java:41) первопричина javax.servlet.Serv: javax.servlet.Serv. jsp.JspException: java.lang.NullPointerException org.apache.jasper.runtime..jsp.module.purap.PurchaseOrder_jsp._jspService(PurchaseOrder_jsp.java:269) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org. sper.jp. служба (JspServletWrapper.java:388) jg org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:2tth).HttpServlet.service(HttpServlet.java:717) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398 или) struts.action.RequestProcessor.process (RequestProcessor.java:241) org.kuali.rice.kns.web.struts.action.KualiRequestProcessor.process (KualiRequestProcessor.java:101) org.apache.struts.action.ActionServlet.cess(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.kuali.rice.kew.web.UserLoginFilter.doFilter(UserLoginFilter.java:92) org.jasig.cas.client.util. org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:167) org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:ki.we.we.gi) или filter.SetResponseBufferSizeFilter.doFilter(SetResponseBufferSizeFilter.java:78) org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) org.kuali.ililFF первопричина) org.kuali.rice.kns.datadictionary.exporter.DocumentEntryMapper.mapEntry(DocumentEntryMapper.java:88) org.kuali.rice.kns.datadictionary.exporter.TransactionalDocumentEntryMapper. DataDictionaryMap.java:60) javax.el.MapELResolver.getValue(MapELResolver.java:51) javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) org.apache.el.parser.AstValueal () 123) org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) org.apache.jasper.runtime.PageContextImpl.pprietaryEvaluate(PageContextImpl.java:938) org.apache.jsp.agedta.web._jspx_meth_c_005fset_005f0(documentPage_tag.java:382) org.apache.jsp.tag.web.kr.documentPage_tag.doTag(documentPage_tag.java:313) org.apache.jsp.jsp.module.pavaj.jp_player 260) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.ap.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085.strug.ache). action.RequestProcessor.processForwardConfig (RequestProcessor.java:398) org.apache.struts.action.RequestProcessor.process (RequestProcessor.java:241) org.kuali.rice.kns.web.struts.action.KualiRequestProcessor.process (KualiRequestProcessor.process. Java:101) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.kuali.rice.kew.web.UserLoginFilter.doFilter(UserLoginFilter.java:92) org.cas.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter.java:50) org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValid.jilta:121) org.kuali.rice.kns.web.filter.SetResponseBufferSizeFilter.doFilter(SetResponseBufferSizeFilter.java:78) org.displaytag.filter.ResponseOverrideFilter.doFilter(Отклик).filter.SessionFilter.doFilter (SessionFilter.java:41)
1 ответ
Вышеприведенный код, как оказалось, был правильным.
Проблема с этим заключалась в том, что я вызывал свой метод установки для временного объекта, который не сохранялся в Spring Framework. (например, я вызывал его для объекта, область которого заканчивалась в блоке, из которого я вызывал его!)
Чтобы это исправить, я просто вызвал сеттер для другого экземпляра того же класса, который находился в области видимости.
Ughh...
Живи и учись.