【问题标题】:Calling web service from Java "The message with Action '' cannot be processed at the receiver"从 Java 调用 Web 服务“接收方无法处理带有 Action '' 的消息”
【发布时间】:2015-10-22 17:41:05
【问题描述】:

我是 Web 服务和 Java 的新手,所以在将我的应用程序与外部 Web 服务连接时遇到了一些问题。我总是得到这个异常

接收方无法处理带有 Action '' 的消息

也许我的假设是错误的,但我认为该操作是在 SOAP 有效负载中定义的。这是 WSDL:

<?xml version='1.0'?>
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.tempuri.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.tempuri.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types />
  <message name="BINICIARREPORTRequest">
    <part name="EAUSUARIO" type="xsd:string" />
    <part name="EAMODULO" type="xsd:string" />
    <part name="EANOMREPOR" type="xsd:string" />
    <part name="EAPARAMREPOR" type="xsd:string" />
    <part name="EANOMPANTA" type="xsd:string" />
  </message>
  <message name="BINICIARREPORTResponse">
    <part name="RESULT" type="xsd:boolean" />
  </message>
  <portType name="PWS_LANZA_REPOR_PORT_1">
    <operation name="BINICIARREPORT">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
      <input message="tns:BINICIARREPORTRequest" />
      <output message="tns:BINICIARREPORTResponse" />
    </operation>
  </portType>
  <binding name="PWS_LANZA_REPOR_PORT_1Soap" type="tns:PWS_LANZA_REPOR_PORT_1">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" />
    <operation name="BINICIARREPORT">
      <soap:operation soapAction="http://www.tempuri.org/wsdl/BINICIARREPORTRequest" style="rpc" />
      <input name="BINICIARREPORTRequest">
        <soap:body use="encoded" namespace="http://www.tempuri.org/wsdl/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
      </input>
      <output name="BINICIARREPORTResponse">
        <soap:body use="encoded" namespace="http://www.tempuri.org/wsdl/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
      </output>
    </operation>
  </binding>
  <service name="PWS_LANZA_REPOR">
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
    <port name="PWS_LANZA_REPOR_PORT_1Port" binding="tns:PWS_LANZA_REPOR_PORT_1Soap">
      <soap:address location="" />
    </port>
  </service>
</definitions>

这是我正在使用的代码:

        final String endpointUrl = this.configuracion
                .getConfigJNDI(WS_MECANIZACION_JNDI);

        final QName serviceName = new QName(null,
                "PWS_LANZA_REPOR");
        final QName portName = new QName(null, "PWS_LANZA_REPOR_PORT_1Port");
        final javax.xml.ws.Service service = javax.xml.ws.Service
                .create(serviceName);
        service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING,
                endpointUrl);

        final Dispatch<SOAPMessage> dispatch = service.createDispatch(
                portName, SOAPMessage.class,
                javax.xml.ws.Service.Mode.MESSAGE);

        final SOAPMessage response = dispatch.invoke(mensajeSOAP);

如果我使用 SoapUI 进行检查,一切正常(消息和端点 URL 都正常),但 java 应用程序没有任何成功。

这是我要发送的肥皂信息:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="s" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
        <wsdl:BINICIARREPORT xmlns:wsdl="cosa">
            <EAUSUARIO>CD</EAUSUARIO>
            <EAMODULO>PR</EAMODULO>
            <EANOMREPOR>PRR14</EANOMREPOR>
            <EAPARAMREPOR/>
            <EANOMPANTA/>
        </wsdl:BINICIARREPORT>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我不知道这是否重要,但是给我的网址末尾没有“?wsdl”:

http://prueba/prueba/Pws_Lanza_Rep1.svc

有什么线索吗?

【问题讨论】:

    标签: java web-services soap


    【解决方案1】:

    我还没弄明白,但是按照here 的步骤操作一切正常! 我使用了相同的 xml 和相同的参数,所以对我来说为什么之前的代码不起作用仍然是个谜。

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多