wso2ei - 6.1.1 - Axis2Sender Неожиданная ошибка при отправке сообщения - PullRequest
0 голосов
/ 28 мая 2018

Когда я пытаюсь отправить запрос на мыло в мой веб-сервис с wso2ei, я получаю эту ошибку:

Если я вызываю прямой прокси или веб-сервис, все в порядке, швы - это что-то с посредником отправки, ноЯ не могу понять!Даже если я изменю код для вызова прямого веб-сервиса по конечной точке, ошибка будет той же.

[2018-05-28 14:39:34,150] [EI-Core] ERROR - Axis2Sender Unexpected error during sending message out
org.apache.axis2.AxisFault: The system cannot infer the transport information from the /helloworld URL.
    at org.apache.axis2.description.ClientUtils.inferOutTransport(ClientUtils.java:81)
    at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:115)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
    at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:595)
    at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:83)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:548)
    at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:382)
    at org.apache.synapse.endpoints.WSDLEndpoint.send(WSDLEndpoint.java:75)
    at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:121)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
    at org.apache.synapse.rest.Resource.process(Resource.java:343)
    at org.apache.synapse.rest.API.process(API.java:399)
    at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:123)
    at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:101)
    at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:69)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304)
    at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:78)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:326)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:372)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Вот мой код:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/helloworld" name="HelloWorldAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <property description="createName" expression="json-eval($.name)" name="name" scope="default" type="STRING"/>
            <log description="requestLog" level="custom">
                <property expression="fn:concat(&quot;User name: &quot;,get-property(&quot;name&quot;))" name="message"/>
            </log>
            <payloadFactory description="convertToSoap" media-type="xml">
                <format>
                    <hel:GreetingRequest xmlns:hel="http://qualicorp.com.br/ws/HelloWorldWS/">
                        <hel:name>$1</hel:name>
                    </hel:GreetingRequest>
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property(&quot;name&quot;)"/>
                </args>
            </payloadFactory>

            <property name="ContentType" value="application/xml" scope="axis2"/>
            <property name="HTTP_METHOD" value="POST" scope="axis2" />  

            <log description="requestSoapLog">
                <property name="message" value="Sending request to Proxy"/>
            </log>
            <send>
                <endpoint>
                    <wsdl port="GreetingProxyHttpSoap11Endpoint" service="GreetingProxy" uri="http://localhost:8280/services/GreetingProxy?wsdl"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence>
            <property name="ContentType" value="application/json" scope="axis2"/>
            <log description="responseLog"/>
            <send/>
        </outSequence>
        <faultSequence>
            <log description="ErrorLog"/>
        </faultSequence>
    </resource>
</api>

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="GreetingProxy" startOnLoad="true" transports="https,http" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <endpoint name="endpoint_urn_uuid_1FF78996948B9A0B6E14565751214774-1218279313">
            <wsdl port="GreetingPortSoap11" service="GreetingPortService" uri="http://localhost:8080/HelloWorldWS/ws/greeting.wsdl"/>
        </endpoint>
        <inSequence>
            <log description="requestLog">
                <property name="message" value="Sending request"/>
            </log>
        </inSequence>
        <outSequence>
            <log description="responseLog">
                <property name="message" value="&quot;Returning web service&quot;"/>
            </log>
            <send/>
        </outSequence>
        <faultSequence>
            <log description="ErrorLog"/>
        </faultSequence>
    </target>
</proxy>

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Я думаю, что нашел что-то.Я могу использовать тег wsdl-endpoint , если отправляю его напрямую на веб-сервер Tomcat, если я получаю доступ к своей веб-службе через прокси-сервер wso2, address-endpoint должен бытьвыбор.

У меня нет никакого объяснения, почему, но это пока что поведение wso2.

0 голосов
/ 28 мая 2018

Я только что нашел интересное поведение.Если я изменю wsdl-endpoint на address-endpoint , API будет работать.Я добавил payloadFactory для создания restResponse и некоторых журналов.

Я до сих пор не знаю, почему wsdl-endpoint не работает или что я должен изменить, чтобы заставить его работать.

<?xml version="1.0" encoding="UTF-8"?>
<api context="/helloworld" name="HelloWorldAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <property description="createName" expression="json-eval($.name)" name="name" scope="default" type="STRING"/>
            <log description="requestLog" level="custom">
                <property expression="fn:concat(&quot;Nome do usuario recebido: &quot;,get-property(&quot;name&quot;))" name="message"/>
            </log>
            <payloadFactory description="convertToSoap" media-type="xml">
                <format>
                    <hel:GreetingRequest xmlns:hel="http://qualicorp.com.br/ws/HelloWorldWS/">
                        <hel:name>$1</hel:name>
                    </hel:GreetingRequest>
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property(&quot;name&quot;)"/>
                </args>
            </payloadFactory>
            <property name="ContentType" scope="axis2" type="STRING" value="application/xml"/>
            <property name="HTTP_METHOD" scope="axis2" type="STRING" value="POST"/>
            <log description="requestSoapLog">
                <property name="message" value="Enviando requisicao ao Proxy"/>
            </log>
            <send>
                <endpoint>
                    <address uri="http://localhost:8280/services/GreetingProxy?wsdl"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence>
            <payloadFactory description="convertToSoap" media-type="json">
                <format>
                    {
                        greeting: "$1"
                    }
                </format>
                <args>
                    <arg evaluator="xml" expression="//ns2:greeting/ns2:message/text()" xmlns:ns2="http://qualicorp.com.br/ws/HelloWorldWS/"/>
                </args>
            </payloadFactory>
            <property name="ContentType" scope="axis2" type="STRING" value="application/json"/>
            <log description="responseLog"/>
            <send/>
        </outSequence>
        <faultSequence>
            <log description="ErrorLog"/>
        </faultSequence>
    </resource>
</api>

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="GreetingProxy" startOnLoad="true" transports="https http" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <endpoint name="endpoint_urn_uuid_1FF78996948B9A0B6E14565751214774-1218279313">
            <wsdl port="GreetingPortSoap11" service="GreetingPortService" uri="http://localhost:8080/HelloWorldWS/ws/greeting.wsdl"/>
        </endpoint>
        <inSequence>
            <log description="requestLog">
                <property name="message" value="Recebendo requisicao"/>
            </log>
        </inSequence>
        <outSequence>
            <log description="responseLog">
                <property name="message" value="&quot;Retorno do web service&quot;"/>
            </log>
            <log description="responseXmlLog" level="custom">
                <property expression="//ns2:greeting" name="message" xmlns:ns2="http://qualicorp.com.br/ws/HelloWorldWS/"/>
            </log>
            <send/>
        </outSequence>
        <faultSequence>
            <log description="ErrorLog"/>
        </faultSequence>
    </target>
</proxy>
...