Проблема наследования 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...

Живи и учись.

Другие вопросы по тегам