相关疑难解决方法(0)

Spring Web Services - 异常跳过ExceptionResolver

我有一个SOAP服务,如果我为XML元素指定了错误的输入,请求和响应按预期工作,输入良好

在请求正文中:

...
<ns:myIntegerElement>asdf</ns:myIntegerElement>
...
Run Code Online (Sandbox Code Playgroud)

我的异常解析器被调用,这个解析器只是异常解析器的一个实现,因此它没有异常映射,只是抽象方法中的一些System.out

<bean id="exceptionResolver" class="com.mycompany.ws.MyExceptionResolver">
Run Code Online (Sandbox Code Playgroud)

但是,如果我发送的请求看起来更像这样:

...
    <ns:myIntegSOMETHINGGOTTOTALLYMESSUP!!!ent>asdf</ns:myIntegerElement>
...
Run Code Online (Sandbox Code Playgroud)

我的解析器根本没有执行

我将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 .springframework.ws.soap.saaj.SaajSoapMessage.getImplementation(SaajSoapMessage.java:251)org.springframework.ws.soap.saaj.SaajSoapMessage.(SaajSoapMessage.java:位于org.springframework.ws.soap.saaj.support.SaajUtils.getSaajVersion的com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:122)中的createEnvelopeFromSource(SOAPPart1_1Impl.java:70)( 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的com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer.transform(EfficientStreamingTransformer.java:393).internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:102)... 27更多引起:org.xml.sax.SAXParseException:元素类型"smm:smm-aid"必须由匹配终止结束标记"".at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java: 522)在com的com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636)的org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) .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"必须由匹配的结束标记""终止.at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java: 522)在com的com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636)的org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) .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"必须由匹配的结束标记""终止.at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java: 522)在com的com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636)的org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) .sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707)... 30更多 元素类型"smm:smm-aid"必须由匹配的结束标记""终止.at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java: 522)在com的com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636)的org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) .sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707)... 30更多 元素类型"smm:smm-aid"必须由匹配的结束标记""终止.at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java: …

java soap web-services spring-ws

6
推荐指数
2
解决办法
1万
查看次数

JAX-WS spring服务器端为RuntimeExceptions设置自定义故障消息

问题

默认情况下,当RuntimeException在我的服务器上发生扩展的未捕获异常时,JAX-WS会构建以下SOAP错误消息:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Server</faultcode>
         <faultstring>[runtime exception message here]</faultstring>
         <detail>
            <ns2:exception class="java.lang.RuntimeException" note="To disable this feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false" xmlns:ns2="http://jax-ws.dev.java.net/">
               <message>[runtime exception message here too]</message>
               <ns2:stackTrace>
                  [stack trace details]
               </ns2:stackTrace>
            </ns2:exception>
         </detail>
      </S:Fault>
   </S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)

哪种有意义,除了我想改变那种行为以便发送它:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Server</faultcode>
         <faultstring>Something wrong happened and it's totally our fault</faultstring>
      </S:Fault>
   </S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)

请注意,消息应该是RuntimeException的消息内容,而是针对可能在服务器端进行扩展的任何异常的自定义静态消息.RuntimeException

我无法更改WSDL,我不想设置自定义异常.

我正在使用spring插件: com.sun.xml.ws.transport.http.servlet.WSSpringServlet

我怎样才能做到这一点?

java spring web-services jax-ws jax-ws-customization

6
推荐指数
1
解决办法
2445
查看次数

SoapFaultMappingExceptionResolver永远不会受到常规java异常的攻击

任何人都可以告诉我为什么我不能用我的解析器捕获常规Java异常,所以我可以在回复响应之前对其进行转换?它永远不会被断点击中.如果不可能,我该怎么办?

SoapFaultMappingExceptionResolver

public class LisSoapFaultTranslatorExceptionResolver extends SoapFaultMappingExceptionResolver {

    @Override
    protected void customizeFault(Object endpoint, Exception ex, SoapFault fault) {

        SoapFaultDetail detail = fault.addFaultDetail();
    }
}
Run Code Online (Sandbox Code Playgroud)

<sws:annotation-driven />
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping" />
<bean id="exceptionResolver"
            class="com.openclass.adapter.ws.resolvers.LisSoapFaultTranslatorExceptionResolver">
            <property name="defaultFault" value="RECEIVER,Server error">
            </property>
            <property name="exceptionMappings">
                <value>java.lang.Exception=SERVER,FaultMsg</value>
        </property>
    </bean>
Run Code Online (Sandbox Code Playgroud)

有错误的肥皂反应

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring xml:lang="en">java.lang.NullPointerException</faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

网络服务

@PayloadRoot(localPart="readCourseSectionRequest", namespace="http://www.imsglobal.org/services/lis/cmsv1p0/wsdl11/sync/imscms_v1p0")
    @ResponsePayload
    public ReadCourseSectionResponse readCourseSection(@RequestPayload ReadCourseSectionRequest request, MessageContext messageContext) {

            // Throws error since courseService is null
        ReadCourseSectionResponse openClassResponse = courseService.readCourseSection(request);

        return new …
Run Code Online (Sandbox Code Playgroud)

java spring soap spring-ws exception

4
推荐指数
1
解决办法
5510
查看次数