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.HttpServletConnection@c46dcf ] から [ 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 です: 指定されたソースからエンベロープを作成できません: org.springframework.ws.soap.saaj.support.SaajUtils.getSaajVersion(SaajUtils.java:162) at org org.springframework.ws.soap.saaj.SaajSoapMessage.(SaajSoapMessage.java: org.springframework.ws.soap.saaj.support.SaajUtils.getSaajVersion( SaajUtils.java:159) ... 24 以上 原因: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: 要素タイプ "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.parse(SAXParserImpl.java: 522) org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636) com .sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707) ... 30 以上 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.parse(SAXParserImpl.java: 522) org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636) com .sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707) ... 30 以上 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.parse(SAXParserImpl.java: 522) org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636) com .sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707) ... 30 以上 要素タイプ「smm:smm-aid」は、一致する終了タグ「」で終了する必要があります。com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231) com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java: 522) org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636) com .sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707) ... 30 以上 要素タイプ「smm:smm-aid」は、一致する終了タグ「」で終了する必要があります。com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231) com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java: 522) org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636) com .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>