0
votes

I am new to WSO2. I have created a proxy service which receives messages and then stores them in a jms message queue in WSO2 Message Broker. The messages from the message queue are then picked up by the message processor, which forwards them to the backend service for processing. All the configuration is done following the documentation provided by WSO2 at https://docs.wso2.com/display/ESB481/Store+and+Forward+Using+JMS+Message+Stores

The message is being successfuly stored in the message queue and i can see it from the message broker management console. But when the message processor reads the message to send it to the backend for processing i get the following error

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

I have been searching for days an could not get this resolved.

The following are my configurations.

`

<?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>
      `

Message Store Settings `

<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 Configuration `

<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>
                `    

Backend Serivce Created by 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>

`

** Backend dataservice 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>

`

2

2 Answers

0
votes

Analyzing the error it seems that this is invoking an endpoint that is not defined in the synapse artifacts.

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

This could be possibly due to the context getting appended while adding the messages to the message store. In order to remove the context please make sure that you add the following property before adding the messages to the message store.

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

Additionally, since you are invoking a SOAP backend, please make sure to add the corresponding SOAP action while adding the messages to the message store

0
votes

After trying out all the possible solutions on the internet. I got the problem solved by by doing the following,

1)Some how the transport properties were not getting picked up so I replaced the wsdl endpoint with an API endpoint.

2) Another thing which i was missing was that i had not written a reply sequence in the message processor which handles the response from the backend service.

After making these changes it worked like a charm!