DataPower WebServiceProxy выбор данных

Я ищу решение проблемы. Я начну с примера: у нас есть веб-сервис SOAP, который возвращает userData (userName + userAddress), я использую прокси-сервер веб-службы для извлечения UserData, но затем я хочу получить только userName - это нужно сделать через DataPower как Что ж. Как этого добиться? Я думал о добавлении другого прокси-сервера веб-службы, но как добавить логику в приложение, которое выбирает только имя пользователя? Есть ли какое-либо сообщение преобразовать в дп?

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>

UsersCatalog.java (класс UserImpl имеет 2 поля - userName и userAddress + setter и getter, которые устанавливают / получают оба из них в массиве строк одновременно)

package wtp;

import javax.jws.WebMethod;
import javax.jws.WebService;


@WebService
public class UsersCatalog implements User{
    public static final User userImpl = new UserImpl();


    @Override
    @WebMethod
    public String[] getUserData() {
        System.out.println("getUserData");
        return userImpl.getUserData();
    }

    @Override
    @WebMethod
    public void setUserData(String userName, String userAddress) {
        System.out.println("setUserData");
        userImpl.setUserData(userName, userAddress);
    }
}

Я слышал о том, что называется преобразованием сообщений в 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. Как получить такой результат?

0 ответов

Вы можете использовать действие Transform и XSLT для достижения этого требования. При создании прокси-сервера веб-службы (WSP) правило обработки автоматически создается для каждой операции. Вы можете просмотреть эти правила обработки на вкладке Политика WSP. Вы можете добавить действие Transform к тому правилу, которое создано для операции getUserData.

Чтобы узнать о том, как создать XSLT для исключения элемента из XML, вы можете взглянуть на эту страницу

Другие вопросы по тегам