WSO2 Message Processor Error : The system cannot infer the transport information from endpoint URL

WSO2 Message Processor Error : The system cannot infer the transport information from endpoint URL

我是 WSO2 的新手。我创建了一个代理服务,它接收消息,然后将它们存储在 WSO2 Message Broker 的 jms 消息队列中。然后消息处理器从消息队列中取出消息,将它们转发到后端服务进行处理。所有配置都按照 WSO2 在 https://docs.wso2.com/display/ESB481/Store+and+Forward+Using+JMS+Message+Stores

提供的文档完成

消息正在成功存储在消息队列中,我可以从消息代理管理控制台看到它。但是当消息处理器读取消息将其发送到后端进行处理时,我得到以下错误

错误 - 客户端实用程序。系统无法推断系统无法从 services/test.testHttpSoap12Endpoint URL

推断传输信息

我找了好几天都没有解决这个问题。

以下是我的配置。

`

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="abdtest"
       startOnLoad="true"
       statistics="disable"
       trace="disable"
       transports="http,https">
   <target>
      <inSequence>
         <property name="OUT_ONLY" value="false"/>
         <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/>
         <store messageStore="testingstore"/>
      </inSequence>
   </target>
   <publishWSDL preservePolicy="true"
                uri="http://10.100.32.65:8280/services/GetDataDSS?wsdl"/>
   <description/>
</proxy>
      `

消息存储设置 `

<messageStore name="testingstore" class="org.apache.synapse.message.store.impl.jms.JmsStore" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
   <parameter name="java.naming.provider.url">conf/jndi.properties</parameter>
   <parameter name="store.jms.destination">testingstore</parameter>
   <parameter name="store.jms.JMSSpecVersion">1.1</parameter>
   <parameter name="store.producer.guaranteed.delivery.enable">false</parameter>
   <parameter name="store.failover.message.store.name">testingstore</parameter>
</messageStore>

**Message Processor Settings**

<messageProcessor name="Mb_MsgProcessor" class="org.apache.synapse.message.processor.impl.forwarder.ScheduledMessageForwardingProcessor" targetEndpoint="GetDataDSS" messageStore="testingstore" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="interval">1000</parameter>
   <parameter name="client.retry.interval">1000</parameter>
   <parameter name="max.delivery.attempts">1</parameter>
   <parameter name="max.store.connection.attempts">-1</parameter>
   <parameter name="store.connection.retry.interval">1000</parameter>
   <parameter name="message.processor.failMessagesStore">testingstore</parameter>
   <parameter name="is.active">true</parameter>
   <parameter name="max.delivery.drop">Disabled</parameter>
   <parameter name="member.count">1</parameter>
</messageProcessor> 

`

端点配置 `

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="GetDataDSS">
   <wsdl uri="http://10.100.32.65:8280/services/GetDataDSS?wsdl" service="GetDataDSS" port="SOAP11Endpoint">
      <suspendOnFailure>
         <progressionFactor>1.0</progressionFactor>
      </suspendOnFailure>
      <markForSuspension>
         <retriesBeforeSuspension>0</retriesBeforeSuspension>
         <retryDelay>0</retryDelay>
      </markForSuspension>
   </wsdl>
</endpoint>
                `    

在 wso2 esb DSS 中创建的后端服务 `

<data enableBatchRequests="true" name="GetDataDSS" transports="http https">
   <config enableOData="false" id="Testing">
      <property name="driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
      <property name="url">jdbc:sqlserver://10.XXXX.XX.57:1433;databaseName=Test</property>
      <property name="username">XXXXXXXX</property>
      <property name="password">XXXXXXXX</property>
   </config>
   <query id="GetDataForDSS" useConfig="Testing">
      <sql>SELECT UserID,UserName,Password,AdminCode&#xd;FROM [Test].[dbo].[tbl_User]</sql>
      <result element="Entries" rowName="Entry">
         <element column="UserID" name="UserID" xsdType="string"/>
         <element column="UserName" name="UserName" xsdType="string"/>
         <element column="Password" name="Password" xsdType="string"/>
         <element column="AdminCode" name="AdminCode" xsdType="string"/>
      </result>
   </query>
   <operation name="GetData">
      <call-query href="GetDataForDSS"/>
   </operation>
</data>

`

** 后端数据服务 WSDL** `

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ns0="http://ws.wso2.org/dataservice" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://ws.wso2.org/dataservice">
<wsdl:documentation/>
<wsdl:types>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://ws.wso2.org/dataservice">
<xs:element name="DataServiceFault">
<xs:complexType>
<xs:sequence>
<xs:element name="current_params" type="xs:string"/>
<xs:element name="current_request_name" type="xs:string"/>
<xs:element name="nested_exception" type="xs:string"/>
<xs:element name="source_data_service">
<xs:complexType>
<xs:sequence>
<xs:element name="location" type="xs:string"/>
<xs:element name="default_namespace" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
<xs:element name="data_service_name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ds_code" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="REQUEST_STATUS" type="xs:string"/>
<xs:element name="DATA_SERVICE_RESPONSE">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetData">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="Entries" type="ns0:Entries"/>
<xs:complexType name="Entries">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="Entry" type="ns0:Entry"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Entry">
<xs:sequence>
<xs:element name="UserID" nillable="true" type="xs:string"/>
<xs:element name="UserName" nillable="true" type="xs:string"/>
<xs:element name="Password" nillable="true" type="xs:string"/>
<xs:element name="AdminCode" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetDataRequest">
<wsdl:part name="parameters" element="ns0:GetData"/>
</wsdl:message>
<wsdl:message name="GetDataResponse">
<wsdl:part name="parameters" element="ns0:Entries"/>
</wsdl:message>
<wsdl:message name="DataServiceFault">
<wsdl:part name="parameters" element="ns0:DataServiceFault"/>
</wsdl:message>
<wsdl:portType name="GetDataDSSPortType">
<wsdl:operation name="GetData">
<wsdl:documentation/>
<wsdl:input message="ns0:GetDataRequest" wsaw:Action="urn:GetData"/>
<wsdl:output message="ns0:GetDataResponse" wsaw:Action="urn:GetDataResponse"/>
<wsdl:fault message="ns0:DataServiceFault" name="DataServiceFault" wsaw:Action="urn:GetDataDataServiceFault"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="GetDataDSSSOAP11Binding" type="ns0:GetDataDSSPortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<wsdl:operation name="GetData">
<soap:operation soapAction="urn:GetData" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="DataServiceFault">
<soap:fault use="literal" name="DataServiceFault"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="GetDataDSSSOAP12Binding" type="ns0:GetDataDSSPortType">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<wsdl:operation name="GetData">
<soap12:operation soapAction="urn:GetData" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
<wsdl:fault name="DataServiceFault">
<soap12:fault use="literal" name="DataServiceFault"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="GetDataDSSHttpBinding" type="ns0:GetDataDSSPortType">
<http:binding verb="POST"/>
<wsdl:operation name="GetData">
<http:operation location="GetData"/>
<wsdl:input>
<mime:content type="text/xml" part="parameters"/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="parameters"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="GetDataDSS">
<wsdl:port name="SecureSOAP11Endpoint" binding="ns0:GetDataDSSSOAP11Binding">
<soap:address location="https://XXXXXX:8243/services/GetDataDSS.SecureSOAP11Endpoint"/>
</wsdl:port>
<wsdl:port name="SOAP11Endpoint" binding="ns0:GetDataDSSSOAP11Binding">
<soap:address location="http://XXXXXX:8280/services/GetDataDSS.SOAP11Endpoint"/>
</wsdl:port>
<wsdl:port name="SecureSOAP12Endpoint" binding="ns0:GetDataDSSSOAP12Binding">
<soap12:address location="https://XXXXXX:8243/services/GetDataDSS.SecureSOAP12Endpoint"/>
</wsdl:port>
<wsdl:port name="SOAP12Endpoint" binding="ns0:GetDataDSSSOAP12Binding">
<soap12:address location="http://XXXXXX:8280/services/GetDataDSS.SOAP12Endpoint"/>
</wsdl:port>
<wsdl:port name="SecureHTTPEndpoint" binding="ns0:GetDataDSSHttpBinding">
<http:address location="https://XXXXXX:8243/services/GetDataDSS.SecureHTTPEndpoint"/>
</wsdl:port>
<wsdl:port name="HTTPEndpoint" binding="ns0:GetDataDSSHttpBinding">
<http:address location="http://XXXXXX:8280/services/GetDataDSS.HTTPEndpoint"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

`

分析错误似乎是在调用突触工件中未定义的端点。

ERROR- Client Utils. The system cannot infer the the system cannot infer the transport information from the services/test.testHttpSoap12Endpoint URL

这可能是由于在将消息添加到消息存储时附加了上下文。为了删除上下文,请确保在将消息添加到消息存储之前添加以下 属性。

<property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>

此外,由于您调用的是 SOAP 后端,请确保在将消息添加到消息存储时添加相应的 SOAP 操作

在尝试了互联网上所有可能的解决方案之后。我解决了这个问题 通过执行以下操作,

1) 一些传输属性未被获取的原因,因此我将 wsdl 端点替换为 API 端点。

2) 我遗漏的另一件事是我没有在处理来自后端服务的响应的消息处理器中编写回复序列。

进行这些更改后,效果非常好!