Soap WSO2 ESB保留有效负载消息

Soap WSO2 ESB保留有效负载消息,soap,wso2esb,Soap,Wso2esb,我有下面的代理服务,它正在被代理服务调用 <?xml version="1.0" encoding="UTF-8"?> <sequence name="seq_invchk_slpa_in" trace="disable" xmlns="http://ws.apache.org/ns/synapse"> <log level="custom"> <property name="STATUS::" value="****************

我有下面的代理服务,它正在被代理服务调用

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="seq_invchk_slpa_in" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <log level="custom">
    <property name="STATUS::" value="***************************"/>
  </log>
  <payloadFactory media-type="xml">
    <format>
      <soapenv:Envelope xmlns:hnb="http://10.104.74.93/hnb"
        xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <soapenv:Header/>
        <soapenv:Body>
          <hnb:CheckInvoiceDetails soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <invoice_no xsi:type="xsd:string">$1</invoice_no>
          </hnb:CheckInvoiceDetails>
        </soapenv:Body>
      </soapenv:Envelope>
    </format>
    <args>
      <arg evaluator="xml" expression="$ctx:invoice_no"/>
    </args>
  </payloadFactory>
  <property name="ContentType" scope="axis2" type="STRING" value="text/xml"/>
  <header name="Action" scope="default" value="CheckInvoiceDetails"/>
  <property name="SOAPAction" scope="transport" type="STRING" value="CheckInvoiceDetails"/>
  <send>
    <endpoint key="gov:INVCHK/SLPA/endpoints/invchk_slpa_validation_ep.xml"/>
  </send>
</sequence>

$1
从工具(soapui)调用时,服务工作没有任何问题

但是当从系统调用时,会出现一个问题。到目前为止我所追踪到的 在正确的呼叫过程中,有效负载工厂消息是否按以下方式发送:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hnb="http://10.104.74.93/hnb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <hnb:CheckInvoiceDetails soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <invoice_no xmlns="http://ws.apache.org/ns/synapse" xsi:type="xsd:string">17231374967185</invoice_no>
      </hnb:CheckInvoiceDetails>
   </soapenv:Body>
</soapenv:Envelope>

17231374967185
当发出错误的调用时,有效负载消息将作为

<?xml version="1.0" encoding="UTF-8"?>
<hnb:CheckInvoiceDetails xmlns:hnb="http://10.104.74.93/hnb" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <invoice_no xmlns="http://ws.apache.org/ns/synapse" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">17231374967185</invoice_no>
</hnb:CheckInvoiceDetails>

17231374967185
我认为这是问题的根源。在错误调用期间,我从客户端得到的响应是

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap .org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
         <faultstring xsi:type="xsd:string">Operation '' is not defined in the WSDL for  this service</faultstring>
         <detail xsi:type="xsd:string" />
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP-ENV:客户端
此服务的WSDL中未定义操作“”
如何保持SOAP消息的原样,并在被系统调用时将其发送出去

为什么soap名称空间在应用程序中会混淆 方法级


任何帮助都将不胜感激。

您至少必须将负载工厂中介的内容更改为

<payloadFactory media-type="xml">
    <format>
          <hnb:CheckInvoiceDetails xmlns:hnb="http://10.104.74.93/hnb">
            <hnb:invoice_no xsi:type="xsd:string">$1</hnb:invoice_no>
          </hnb:CheckInvoiceDetails>
    </format>
    <args>
      <arg evaluator="xml" expression="$ctx:invoice_no"/>
    </args>
  </payloadFactory>

$1
注意没有标签的发票。最初不清楚它应该有什么名称空间,默认情况下,它实际上嵌套了synapse引擎的名称空间。所以最好显式地分配名称空间

默认情况下,Synapse引擎将添加信封


如果消息类型未知,则返回soap12。可在Synapse文档中找到。
没有messageType的属性内容类型无效

保存在属性中。然后在需要时使用enrich进行恢复。感谢您的评论,但在发送消息时发生了更改,这就是问题所在,是否有任何关于添加soap名称空间的线索?PayloadFactory mediator旨在更改消息正文的内容。为什么有信封、页眉和正文标签。WSOESB将在通过传输传输传输消息之前将信封添加到消息本身。默认情况下,synapse引擎将添加SOAP 1.2头,如果我需要1.1头,如何显式添加它们?我现在没有机会检查它。但我记得当您在ESB上的服务的SOAPUI中创建SOAP项目时,您将获得服务的2个副本。一个在soap1.1上工作,另一个在soap1.2Let上工作,比如说服务名称SampleProxy,那么您将获得每个端点的2个副本,每个端点都是您为服务分配的传输类型。对于soap u,请尝试使用正确的地址“如果消息类型未知,则返回soap12。可在Synapse文档中找到。没有消息类型的属性内容类型无效。”,这是绝对正确的,有助于克服此问题,非常感谢您的时间:)