Веб-службы Spring - исключение исключения ExceptionResolver

У меня есть сервис SOAP, запрос и ответы работают, как и ожидалось, с хорошим вводом, если я укажу неверный ввод для элемента XML

в теле запроса:

...
<ns:myIntegerElement>asdf</ns:myIntegerElement>
...

Мой распознаватель исключений вызывается, этот преобразователь является просто реализацией преобразователя исключений, поэтому он не имеет отображений исключений, только несколько System.out в абстрактном методе

<bean id="exceptionResolver" class="com.mycompany.ws.MyExceptionResolver">

Тем не менее, если я отправлю запрос, который выглядит примерно так:

...
    <ns:myIntegSOMETHINGGOTTOTALLYMESSUP!!!ent>asdf</ns:myIntegerElement>
...

мой распознаватель не выполняется вообще

Я установил log4j, чтобы иметь корневой уровень отладки и вижу этот вывод:

2010-08-09 10: 30: 01,900 [Тема: http-8080-2] DEBUG [org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter] - Принятие входящих [org.springframework.ws.transport.http.HttpServletc ] до [Http: // Localhost: 8080 / myws / MyWebServices /] ОШИБКА: 'Тип элемента "ns: MESSEDUPELEMENT" должен завершаться соответствующим конечным тегом "".' 2010-08-09 10: 30: 01,920 [Тема: http-8080-2] DEBUG [org.springframework.ws.transport.http.MessageDispatcherServlet] - Не удалось завершить запрос org.springframework.ws.soap.saaj.SaajSoapMessageException: Не удалось получить доступ к конверту: невозможно создать конверт из указанного источника:; Вложенное исключение - com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: невозможно создать конверт из указанного источника: atg.springframework.ws.soap.saaj.support.SaajUtils.getSaajVersion (SaajUtils.java:162) atg или .springframework.ws.soap.saaj.SaajSoapMessage.getImplementation (SaajSoapMessage.java:251) в org.springframework.ws.soap.saaj.SaajSoapMessage. (SaajSoapMessagej.sa.j.sa.pr. SaajSoapMessage. (SaajSoapMessage.java:70) в org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage (SaajSoapMessageFactory.java:16.Weran.Weran org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection (WebServiceMessageReceiverObjectSupport.java:86) в org.springframework.ws.transport.http.WebService.Werver ransport.http.MessageDispatcherServlet. 511) в javax.servlet.http.HttpServlet.service (HttpServlet.java:637) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.apache.catalina.cilinFilterFilter .java: 290) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:2ap.cat.cat.cat.cat.cat.cat.cat) core.StandardContextValve.invoke (StandardContextValve.java:191) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:127) в org.apache.catalina.valves.ErrorReportValveinport (RevalValve.in). в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.jav a: 109) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:298) в org.apache.coyote.http11.Http11AprProcessor.process (Http11AprProcessor.java:859) в org.apache.coyote .Http11AprProtocol $ Http11ConnectionHandler.process (Http11AprProtocol.java:579) в org.apache.tomcat.util.net.AprEndpoint $ Worker.run (AprEndpoint.java:1555) в java.lang.Thread.run (Thread.java:6) ) Причина: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Невозможно создать конверт из указанного источника: at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope (EnvelopeFactory.java:114 ) в com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource (SOAPPart1_1Impl.java:70) в com.sun.xml.internal.messaging.saaj.soap.SOAPPartImplEE. : 122) at org.springframework.ws.soap.saaj.support.SaajUtils.getSaajVersion (SaajUtils.java:159) ... еще 24 Причина: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: T Тип элемента "smm: smm-aid" должен заканчиваться соответствующим конечным тегом "". на com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform (TransformerImpl.java:719) на com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform (TransformerImpl. Java: 313) в com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer.transform (EfficientStreamingTransformer.java:393) в com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope ( EnvelopeFactory.java:102) ... еще 27 Причина: org.xml.sax.SAXParseException: Тип элемента "smm: smm-aid" должен завершаться соответствующим конечным тегом "". на com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (AbstractSAXParser.java:1231) на com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parsel (SAX 522) в org.xml.sax.helpers.XMLFilterImpl.parse (XMLFilterImpl.java:333) в com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity (TransformerImpl.java:636 at) .sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform (TransformerImpl.java:707) ... еще 30

Похоже, что в Spring здесь отсутствует возможное исключение, и оно не упаковано, но такое основное условие ошибки, которое не было обнаружено, мне кажется маловероятным. Может кто-нибудь помочь мне найти корень этой проблемы?

Я включу также web.xml и servlet.xml:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>ws</servlet-name>
        <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>transformWsdlLocations</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ws</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

контекст сервлета:

<context:component-scan base-package="com.mycomp.proj.ws" />
    <bean id="smmService" class="com.mycomp.proj.ws.SMMRequestHandlingServiceStubImpl"/>

    <bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping"/>
    <bean class="org.springframework.ws.server.endpoint.adapter.MarshallingMethodEndpointAdapter">
        <constructor-arg ref="marshaller"/>
    </bean>
    <bean id="marshaller" class="org.springframework.oxm.castor.CastorMarshaller">
        <property name="mappingLocations">
            <list>
                <value>classpath:mapping.xml</value>
                <value>classpath:hoursOfOperationMapping.xml</value>
            </list>
        </property>
    </bean>

    <bean id="smmws" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
        <property name="schema" ref="schema" />
        <property name="portTypeName" value="SMM" />
        <property name="locationUri" value="/SMMWebServices/"/>
        <property name="targetNamespace" value="http://mycomp.proj.com" />
    </bean>

    <bean id="exceptionResolver" class="com.wdp.smm.ws.MyExceptionResolver"/>

    <bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
        <property name="xsd" value="/WEB-INF/ws.xsd" />
    </bean>

Ответы на вопрос(7)

Ваш ответ на вопрос