3

我是 WSO2 ESB 的新手。我正在为基于 SOAP 的服务做服务代理。我的端点服务有多种方法。谁能建议我如何在我的流文件中声明一个特定的操作(方法)。因为我正在获取未找到操作的端点参考。

下面是我的代理服务 src

 <target>
      <inSequence>
         <log level="full"/>
         <log/>
         <send>
            <endpoint>
               <address uri="http://10.203.60.249:9768/services/EmployeeService/"/>
            </endpoint>
         </send>
      </inSequence>
   </target>

在我的 EmployeeService 中,我有多个操作。所以我需要做什么来调用服务的特定操作。即我有getSalary,editAddress之类的操作

4

5 回答 5

3

您可以像这样通过在您的序列中定义一个动作标头来指定端点的操作,这里的值应该是操作名称(SOAP Action)。

 <header name="Action" value="urn:getSalary"/>
于 2013-09-17T07:11:29.737 回答
0

您可以轻松地在负载中介中指定 Soap 信封本身并调用您的服务

例如

 <payloadFactory media-type="xml">
        <format>
           <p:insert_persons_operation xmlns:p="http://ws.wso2.org/dataservice">
              <xs:P_Id xmlns:xs="http://ws.wso2.org/dataservice">$1</xs:P_Id>
              <xs:LastName xmlns:xs="http://ws.wso2.org/dataservice">$2</xs:LastName>
              <xs:FirstName xmlns:xs="http://ws.wso2.org/dataservice">$3</xs:FirstName>
              <xs:City xmlns:xs="http://ws.wso2.org/dataservice">$4</xs:City>
              <xs:Country xmlns:xs="http://ws.wso2.org/dataservice">$5</xs:Country>
              <xs:Phone xmlns:xs="http://ws.wso2.org/dataservice">$6</xs:Phone>
              <xs:Email xmlns:xs="http://ws.wso2.org/dataservice">$7</xs:Email>
           </p:insert_persons_operation>
        </format>
        <args>
           <arg xmlns:m="http://ws.wso2.org/dataservice"
                evaluator="xml"
                expression="//m:P_Id/text()"/>
           <arg xmlns:m="http://ws.wso2.org/dataservice"
                evaluator="xml"
                expression="//m:LastName/text()"/>
           <arg xmlns:m="http://ws.wso2.org/dataservice"
                evaluator="xml"
                expression="//m:FirstName/text()"/>
           <arg xmlns:m="http://ws.wso2.org/dataservice"
                evaluator="xml"
                expression="//m:City/text()"/>
           <arg xmlns:m="http://ws.wso2.org/dataservice"
                evaluator="xml"
                expression="//m:Country/text()"/>
           <arg xmlns:m="http://ws.wso2.org/dataservice"
                evaluator="xml"
                expression="//m:Phone/text()"/>
           <arg xmlns:m="http://ws.wso2.org/dataservice"
                evaluator="xml"
                expression="//m:Country/text()"/>
        </args>
     </payloadFactory>
     <send>
        <endpoint>
           <address uri="http://localhost:9764/services/MyPostgreDS/"/>
        </endpoint>
     </send>
于 2013-10-01T07:05:00.710 回答
0

我在使用 SOAP(来自 Java)调用 WSO2 Web 服务时遇到了一些问题。一些 WSO2 产品在 1.1 版本中仍然使用 SOAP 协议。2003 年发布了 1.2 版。在 SOAP 1.1 元素中 SOAPAction 是强制性的,因此如果您生成 java 类,则编组后请求中会缺少此元素。

WSO2 ESB 在 1.2 版中已经使用了 SOAP。但是,指定 ACTION 很重要。例如,使用 Spring 在回调中指定 ACTION: Object response = getWebServiceTemplate().marshalSendAndReceive(obj, new SoapActionCallback("urn:getInstanceInfo"));

将(在服务器端)来自 Java 的原始请求与来自 SoapUI 的请求进行比较是很有用的。通常从 SoapUI 调用可以正常工作,但从 Java 调用则不行。

于 2015-02-02T08:46:11.807 回答
0

我遇到了同样的问题。我通过按照 1 将操作名称放在 URL 末尾来解决它。在此页面中Error accessesing published WS proxy in WSO2 ESB 4.6: EPR not found

于 2016-05-23T07:21:20.797 回答
0

这是一个完整的 api 示例

<?xml version="1.0" encoding="UTF-8"?>
<api context="/users" name="TestUserAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET">
        <inSequence>
            <header name="Action" scope="default" value="urn:selectAll"/>
            <send>
                <endpoint key="UserEP"/>
            </send>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
        <faultSequence/>
    </resource>
</api>
于 2018-05-29T21:38:02.437 回答