WSO2消息处理器错误:系统无法从端点URL推断传输信息



我是WSO2的新手。我创建了一个代理服务,它接收消息,然后将它们存储在WSO2MessageBroker中的jms消息队列中。然后,消息处理器从消息队列中提取消息,并将其转发给后端服务进行处理。所有配置均按照WSO2在https://docs.wso2.com/display/ESB481/Store+和+转发+使用+JMS+消息+存储

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

错误-客户端Utils。系统无法推断。系统无法从服务/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>
`    

In 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( 有些传输属性没有被获取,所以我用API端点替换了wsdl端点。

2( 我缺少的另一件事是,我没有在处理后端服务响应的消息处理器中编写回复序列。

在做出这些改变之后,它就像一个魅力!

最新更新