WSO2 REST 到 SOAP 传递操作参数

WSO2 REST to SOAP passing operation parameters

使用 WSO2 ESB 4.8.1,我配置了一个 WSDL 代理,我想通过 REST 访问它。代理指向 SOAP WSDL URI 并已打开发布 WSDL。这似乎工作正常,我可以在 WSO2 管理员 UI 中看到该服务及其各种操作。同样,如果我去 localhost:8280/services/

问题是在通过 HTTP REST 访问时如何传递特定于操作的参数?

假设我的 FooService OperationX 需要一个 "p1" 参数,我可以在浏览器中访问 localhost:8280/services/FooService/OperationX 时直接传递这个参数吗?

我试过 localhost:8280/services/FooService/SomeOperation?p1=somevalue,但总是收到缺少所需参数的验证错误:

cvc-complex-type.2.4.b: The content of element 'axis2ns15:OperationXRequest' is not complete. One of '{"somenamespace":p1}' is expected.

基本的 WSDL 代理可以支持吗?或者我需要使用 API?

我认为您的方案更好的选择是使用 api 通过 REST 进行访问。在这里,我创建了一个 api(我使用了 http://jsonplaceholder.typicode.com/comments as my REST back end) which gets the query parameter(postId) which was sent in REST request (http://172.22.99.96:8290/test/comments?postId=1)并将该值分配给 api 中名为 mypostId 的 属性。 然后我通过使用有效负载工厂中介添加 mypostId 属性 来修改有效负载,它将匹配回显服务请求(我使用回显服务作为 SOAP 后端)。 然后我使用 enrich mediator 通过添加 "xmlns:echo="http://echo.services.core.carbon.wso2.org"" name space 来更改我的 soap 信封以匹配 echo 服务请求 soap 信封。最后,我将创建的请求发送到 echo 服务代理。

<api xmlns="http://ws.apache.org/ns/synapse" name="test" context="/test">
   <resource methods="GET" uri-template="/comments?postId={postId}">
      <inSequence>
         <log level="custom">
            <property name="Message Flow" value="--- Order GET ---"></property>
         </log>
         <log level="custom">
            <property name="postId" expression="$url:postId"></property>
         </log>
         <property name="mypostId" expression="$url:postId"></property>
         <call>
            <endpoint>
               <http method="GET" uri-template="http://jsonplaceholder.typicode.com/comments?postId={uri.var.postId}"></http>
            </endpoint>
         </call>
         <payloadFactory media-type="xml">
            <format>
               <echo:echoInt xmlns:echo="http://echo.services.core.carbon.wso2.org">
                  <in></in>
               </echo:echoInt>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('mypostId')"></arg>
            </args>
         </payloadFactory>
         <log level="full"></log>
         <log level="custom">
            <property name="Message Flow" value="--- After Palyload factory---"></property>
         </log>
         <property name="extarctedBody" expression="$body"></property>
         <log level="custom">
            <property name="MyextarctedBody" expression="get-property('extarctedBody')"></property>
         </log>
         <log level="full"></log>
         <enrich>
            <source type="inline" clone="true">
               <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:echo="http://echo.services.core.carbon.wso2.org"></soapenv:Envelope>
            </source>
            <target type="envelope"></target>
         </enrich>
         <log level="custom">
            <property name="Message Flow" value="--- Order GET2 ---"></property>
         </log>
         <log level="full"></log>
         <enrich>
            <source type="property" clone="true" property="extarctedBody"></source>
            <target xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:echo="http://echo.services.core.carbon.wso2.org" action="child" xpath="//soapenv:Envelope"></target>
         </enrich>
         <log level="full"></log>
         <send>
            <endpoint>
               <address uri="http://localhost:8290/services/echo"></address>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <send></send>
      </outSequence>
   </resource>
</api>

希望这对您有所帮助。