不使用wso2 ESB REST API发送SOAP消息

时间:2016-11-19 15:09:27

标签: web-services rest soap wso2esb

我尝试使用wso2 ESB将SOAP后端公开为REST API。我使用有效负载工厂发送肥皂体信息,但它不起作用。

这是我在wso2 esb代码中的API资源:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/akademik" name="SampleAPI" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/students?symbol={symbol}">
    <inSequence>
        <log level="custom">
            <property expression="$url:symbol" name="symbol"/>
        </log>
        <payloadFactory media-type="xml">
            <format>
                <soapenv:Envelope xmlns:sem="http://semogabisa.te.net/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
                    <soapenv:Header/>
                    <soapenv:Body>
                        <sem:sayHi>
                            <arg0>$1</arg0>
                        </sem:sayHi>
                    </soapenv:Body>
                </soapenv:Envelope>
            </format>
            <args>
                <arg evaluator="xml" expression="$url:symbol"/>
            </args>
        </payloadFactory>
        <header scope="default">
            <m:complexHeader xmlns:m="http://org.synapse.example">
                <m:property key="Content-Type" value="application/xml"/>
            </m:complexHeader>
        </header>
        <send>
            <endpoint>
                <address format="soap11" uri="http://localhost:8084/HelloWorld"/>
            </endpoint>
        </send>
    </inSequence>
    <outSequence>
        <send/>
    </outSequence>
    <faultSequence/>
</resource>

肥皂消息不会发送到后端Web服务,它会显示为null。

我用SOAPUI测试后端服务,使用相同的soap信封格式并且它正在工作

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为你在标题调解员上犯了一些错误。 &#34;的HelloWorld&#34;后端服务根据您的SOAP UI请求不需要SOAP头。所以删除标题中介。

  

如果要操作SOAP标头,请选择Synapse。如果要操作HTTP标头,请选择“传输”。

它的后端似乎是SOAP11,SOAP11类型是&#34; text / xml&#34;。您可能需要设置此属性。

<property name="messageType" value="text/xml" scope="axis2"/>

当您从ESB发送消息时,您需要设置属性&#34; messageType&#34;然后ESB将格式化匹配后端所需的消息。

如果您发现ESB在向后端发送邮件时向后端URI附加了一些上下文,则可能需要此属性。

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

好的提示:
请打开你的&#34; synapse.transport.http.wire&#34;作为DEBUG,这将输出来自ESB的每条消息。此日志将包含HTTP标头和正文。获得有线日志后,您可以将有线日志与您的SOAPUI请求进行比较,然后找出哪个部分是错误的 https://docs.wso2.com/display/ESB481/Setting+Up+Logging