消息部分无法识别。 (它是否存在于服务WSDL中?)

时间:2017-10-26 08:29:15

标签: java soap wsdl cxf wsdl2java

我有以下wsdl文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions 
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns="http://soap.securityconstraintapp.smals.be/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:wsp="http://www.w3.org/ns/ws-policy"
    xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:s0="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
    targetNamespace="http://soap.securityconstraintapp.smals.be/" 
    name="SAMLSecuredHelloImplService">
    <types>
        <xsd:schema targetNamespace="http://soap.securityconstraintapp.smals.be/"
            xmlns="http://www.w3.org/2001/XMLSchema">
            <xsd:complexType name="principal">
                <xsd:sequence>
                    <xsd:element name="name" type="xsd:string"></xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:schema>
    </types>
    <message name="getHello">
        <part name="arg0" type="xsd:string" />
    </message>
    <message name="getHelloResponse">
        <part name="return" type="xsd:string" />
    </message>
    <message name="getPrincipalRequest"></message>
    <message name="getPrincipalResponse">
        <part name="principal" type="xsd:string" />
    </message>
    <portType name="SAMLSecuredHello">
        <operation name="getHello">
            <input
                wsam:Action="http://soap.securityconstraintapp.smals.be/SAMLSecuredHello/getHelloRequest"
                message="tns:getHello" />
            <output
                wsam:Action="http://soap.securityconstraintapp.smals.be/SAMLSecuredHello/getHelloResponse"
                message="tns:getHelloResponse" />
        </operation>
        <operation name="getPrincipal">
            <input
                wsam:Action="http://soap.securityconstraintapp.smals.be/SAMLSecuredHello/getPrincipalRequest"
                message="tns:getPrincipalRequest" />
            <output
                wsam:Action="http://soap.securityconstraintapp.smals.be/SAMLSecuredHello/getPrincipalResponse"
                message="tns:getPrincipalResponse" />
        </operation>
    </portType>
    <binding name="SAMLSecuredHelloImplPortBinding" type="tns:SAMLSecuredHello">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
            style="rpc" />
        <operation name="getHello">
            <input>
                <soap:body use="literal"
                    namespace="http://soap.securityconstraintapp.smals.be/" />
            </input>
            <output>
                <soap:body use="literal"
                    namespace="http://soap.securityconstraintapp.smals.be/" />
            </output>
        </operation>
        <operation name="getPrincipal">
            <input>
                <soap:body use="literal"
                    namespace="http://soap.securityconstraintapp.smals.be/" />
            </input>
            <output>
                <soap:body use="literal"
                    namespace="http://soap.securityconstraintapp.smals.be/" />
            </output>
        </operation>
    </binding>
    <service name="SAMLSecuredHelloImplService">
        <port name="SAMLSecuredHelloImplPort" binding="tns:SAMLSecuredHelloImplPortBinding"></port>
    </service>
</definitions>

我使用cxf从这个wsdl生成我的java,它工作正常。

第一个操作getHello工作正常,但getPrincipalrequest没有,我想这是我的wsdl中的一些小错误,但我似乎无法找到它。

我的cxf引发此请求的错误:

10:13:36,778 WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (http-172.17.0.2:8080-3) Interceptor for {http://soap.securityconstraintapp.smals.be/}SAMLSecuredHelloImplService has thrown exception, unwinding now: org.apache.cxf.interceptor.Fault: Message part {http://soap.securityconstraintapp.smals.be/}getPrincipal was not recognized.  (Does it exist in service WSDL?)
        at org.apache.cxf.interceptor.BareInInterceptor.handleMessage(BareInInterceptor.java:133)
        at org.apache.cxf.binding.soap.interceptor.RPCInInterceptor.handleMessage(RPCInInterceptor.java:111)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:249)
        at org.jboss.wsf.stack.cxf.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:97)
        at org.jboss.wsf.stack.cxf.transport.ServletHelper.callRequestHandler(ServletHelper.java:131)
        at org.jboss.wsf.stack.cxf.CXFServletExt.invoke(CXFServletExt.java:88)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:289)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:209)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
        at org.jboss.wsf.stack.cxf.CXFServletExt.service(CXFServletExt.java:136)
        at org.jboss.wsf.spi.deployment.WSFServlet.service(WSFServlet.java:140)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:420)
        at org.keycloak.adapters.saml.AbstractSamlAuthenticatorValve.invoke(AbstractSamlAuthenticatorValve.java:184)
        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:559)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
        at be.smals.jboss.ProxyValve.invoke(ProxyValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:656)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)
        at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_131]

我得到的回复:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns1:getHelloResponse xmlns:ns1="http://soap.securityconstraintapp.smals.be/">
         <return>SAML, hello ababa</return>
      </ns1:getHelloResponse>
   </soap:Body>
</soap:Envelope>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Message part {http://soap.securityconstraintapp.smals.be/}getPrincipal was not recognized.  (Does it exist in service WSDL?)</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

更新

更改后

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" />

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

我得到了以下错误:

10:11:57,657 WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (http-172.17.0.2:8080-1) Interceptor for {http://soap.securityconstraintapp.smals.be/}SAMLSecuredHelloImplService has thrown exception, unwinding now: java.lang.NullPointerException
        at org.apache.cxf.service.factory.SimpleMethodDispatcher.getMethod(SimpleMethodDispatcher.java:97)
        at org.jboss.wsf.stack.cxf.JBossWSInvoker.invoke(JBossWSInvoker.java:146)
        at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_131]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_131]
        at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
        at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:107)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:249)
        at org.jboss.wsf.stack.cxf.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:97)
        at org.jboss.wsf.stack.cxf.transport.ServletHelper.callRequestHandler(ServletHelper.java:131)
        at org.jboss.wsf.stack.cxf.CXFServletExt.invoke(CXFServletExt.java:88)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:289)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:209)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
        at org.jboss.wsf.stack.cxf.CXFServletExt.service(CXFServletExt.java:136)
        at org.jboss.wsf.spi.deployment.WSFServlet.service(WSFServlet.java:140)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:420)
        at org.keycloak.adapters.saml.AbstractSamlAuthenticatorValve.invoke(AbstractSamlAuthenticatorValve.java:184)
        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:559)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
        at be.smals.jboss.ProxyValve.invoke(ProxyValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:656)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)
        at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_131]

10:11:57,691 INFO  [org.apache.cxf.services.SAMLSecuredHelloImplService.SAMLSecuredHelloImplPort.SAMLSecuredHello] (http-172.17.0.2:8080-1) Outbound Message
---------------------------
ID: 2
Response-Code: 500
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Fault occurred while processing.</faultstring></soap:Fault></soap:Body></soap:Envelope>
--------------------------------------

0 个答案:

没有答案