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, вы можете взглянуть на эту страницу