我尝试使用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信封格式并且它正在工作
答案 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