首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wso2ei - 6.1.1 - Axis2Sender在发送消息时出现意外错误

wso2ei - 6.1.1 - Axis2Sender在发送消息时出现意外错误
EN

Stack Overflow用户
提问于 2018-05-28 18:05:38
回答 2查看 971关注 0票数 0

当我试图从wso2ei向我的web服务发送soap请求时,我得到了以下错误:

如果我调用直接代理或web服务,一切都很好,接缝是与发送中介,但我不知道!即使我更改代码以按端点直接调用web服务,错误也是相同的。

代码语言:javascript
复制
[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)

这是我的代码:

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

发布于 2018-05-28 19:24:43

我刚发现了一些有趣的行为。如果我用address-endpoint更改wsdl端点,则该API可以工作。我添加了一个payloadFactory来创建一个restResponse和一些日志。

我仍然不知道为什么wsdl端点不能工作,或者我应该修改什么来使它工作。

代码语言:javascript
复制
<?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>
票数 0
EN

Stack Overflow用户

发布于 2018-05-28 20:11:34

我想我找到了什么。如果我将address-endpoint直接发送到tomcat的web服务器,如果我通过wso2 2的代理访问我的web服务,那么我可以使用wsdl端点标记作为选择。

我没有任何解释,但这是wso2的行为到目前为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50571587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档