Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DataPower WebServiceProxy数据选择_Java_Web Services_Soap_Ibm Datapower_New Webserviceproxy - Fatal编程技术网

Java DataPower WebServiceProxy数据选择

Java DataPower WebServiceProxy数据选择,java,web-services,soap,ibm-datapower,new-webserviceproxy,Java,Web Services,Soap,Ibm Datapower,New Webserviceproxy,我在寻找解决问题的办法。我将从一个示例开始:我们有一个返回userData(userName+userAddress)的SOAP Web服务,我使用Web服务代理来提取userData,但是我只想接收userName,这也需要通过DataPower完成。如何做到这一点?我正在考虑添加另一个Web服务代理,但是如何向只选择用户名的应用程序添加逻辑?dp中是否有任何消息转换 UsersCatalog.wsdl <?xml version="1.0" encoding="UTF-8"?>

我在寻找解决问题的办法。我将从一个示例开始:我们有一个返回userData(userName+userAddress)的SOAP Web服务,我使用Web服务代理来提取userData,但是我只想接收userName,这也需要通过DataPower完成。如何做到这一点?我正在考虑添加另一个Web服务代理,但是如何向只选择用户名的应用程序添加逻辑?dp中是否有任何消息转换

UsersCatalog.wsdl

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://wtp" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://wtp" xmlns:intf="http://wtp" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://wtp" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="getUserData">
    <complexType/>
   </element>
   <element name="getUserDataResponse">
    <complexType>
     <sequence>
      <element maxOccurs="unbounded" name="getUserDataReturn" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="setUserData">
    <complexType>
     <sequence>
      <element name="userName" type="xsd:string"/>
      <element name="userAddress" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="setUserDataResponse">
    <complexType/>
   </element>
  </schema>
 </wsdl:types>

   <wsdl:message name="setUserDataResponse">

      <wsdl:part element="impl:setUserDataResponse" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:message name="getUserDataRequest">

      <wsdl:part element="impl:getUserData" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:message name="setUserDataRequest">

      <wsdl:part element="impl:setUserData" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:message name="getUserDataResponse">

      <wsdl:part element="impl:getUserDataResponse" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:portType name="UsersCatalog">

      <wsdl:operation name="getUserData">

         <wsdl:input message="impl:getUserDataRequest" name="getUserDataRequest">

       </wsdl:input>

         <wsdl:output message="impl:getUserDataResponse" name="getUserDataResponse">

       </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="setUserData">

         <wsdl:input message="impl:setUserDataRequest" name="setUserDataRequest">

       </wsdl:input>

         <wsdl:output message="impl:setUserDataResponse" name="setUserDataResponse">

       </wsdl:output>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="UsersCatalogSoapBinding" type="impl:UsersCatalog">

      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="getUserData">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getUserDataRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="getUserDataResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="setUserData">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="setUserDataRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="setUserDataResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="UsersCatalogService">

      <wsdl:port binding="impl:UsersCatalogSoapBinding" name="UsersCatalog">

         <wsdlsoap:address location="http://localhost/WebServiceProject/services/UsersCatalog"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions>
我听说datapower中有一种叫做消息转换的东西。如果我可以选择xml实体来返回,这将非常简单

我将添加更多内容以更好地指定我的需求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <getUserDataResponse xmlns="http://wtp">
         <getUserDataReturn>John</getUserDataReturn>
         <getUserDataReturn>New York</getUserDataReturn>
      </getUserDataResponse>
   </soapenv:Body>
</soapenv:Envelope>

约翰
纽约

这就是我收到的,我希望DataPower以某种方式将其转换为仅返回第一行-仅返回用户名John。如何获得这样的结果?

您可以使用转换操作和XSLT来实现这一要求。创建Web服务代理(WSP)时,会自动为每个操作创建一个处理规则。您可以在WSP的策略选项卡中查看这些处理规则。您可以向为getUserData操作创建的规则添加转换操作


要了解如何创建XSLT以从XML中排除元素,可以查看

请显示使用当前代码添加请求的代码
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <getUserDataResponse xmlns="http://wtp">
         <getUserDataReturn>John</getUserDataReturn>
         <getUserDataReturn>New York</getUserDataReturn>
      </getUserDataResponse>
   </soapenv:Body>
</soapenv:Envelope>