我是SOAP服务的初学者。我有一个用例来使用一些SOAP方法。因此,我编写了一个客户机来获取一些服务端口的方法数据。
目前,我从导入的WSDL中了解到,特定的服务方法有一个空返回类型。但是,我希望有返回端口方法。例如:
这是WSDL当前的行为:
SomeService ss = new SomeService();
ProxyPort port = ss.getPort();
port.IdentifyBaggage(identifyBaggageIndicators,
bagTagDetailsTopLevel, baggageGroupInfo, flightDetailsResponse, quantityDetails, dummySegment);然而,我想要的行为是:
SomeService ss = new SomeService();
ProxyPort port = ss.getPort();
BaggageReply reply= port.IdentifyBaggage(identifyBaggageIndicators,
bagTagDetailsTopLevel, baggageGroupInfo, flightDetailsResponse, quantityDetails, dummySegment);我尝试在SEI中添加返回类型,但是它给了我:
线程"main“中的com.sun.proxy.$Proxy46.IdentifyBaggage(Unknown异常:不能在com.sun.proxy.$Proxy46.IdentifyBaggage(Unknown源代码中将java.util.ArrayList转换为bla.BaggageReply)
SEI看起来是这样的:
/**
* @param identifyBaggageIndicators
* @param bagTagDetails
* @param baggageGroupInfo
* @param routingDetails
* @param historicalDays
* @param dummy
*/
@WebMethod(operationName = "IdentifyBaggage", action = "http://webservices.amadeus.com/endpoint1")
@RequestWrapper(localName = "IdentifyBaggage", targetNamespace = "http://xml.amadeus.com/endpoint1", className = "com.amadeus.xml.bla_bla.IdentifyBaggage")
@ResponseWrapper(localName = "BaggageReply", targetNamespace = "http://xml.amadeus.com/endpoint2", className = "com.amadeus.xml.bla1_bla1.BaggageReply")
public void dcsbagIdentifyBaggage(
@WebParam(name = "identifyBaggageIndicators", targetNamespace = "http://some.host.com/endpoint1")
List<StatusTypeI> identifyBaggageIndicators,
@WebParam(name = "bagTagDetails", targetNamespace = "http://some.host.com/endpoint1")
BaggageInformationTypeI bagTagDetails,
@WebParam(name = "baggageGroupInfo", targetNamespace = "http://xml.amadeus.com/endpoint1")
IdentifyBaggage.BaggageGroupInfo baggageGroupInfo,
@WebParam(name = "routingDetails", targetNamespace = "http://xml.amadeus.com/endpoint1")
FlightDetailsResponseType routingDetails,
@WebParam(name = "historicalDays", targetNamespace = "http://xml.amadeus.com/endpoint1")
NumberOfUnitsType historicalDays,
@WebParam(name = "dummy", targetNamespace = "http://xml.amadeus.com/endpoint2", mode = WebParam.Mode.OUT)
com.amadeus.xml.bla_bla.DummySegmentTypeI dummy);添加返回类型的方法是什么?
发布于 2019-10-09 12:07:04
似乎您首先要做的是契约(您有一个WSDL作为起点) SOAP客户端开发。
您必须连接到某个地方,并且服务是“静态的”(无法更改)
1,如果不能更改SOAP服务(例如,因为它不是您的),并且您拥有的WSDL是正确的(由正在运行的服务组成),则不能这样做。
2,如果您所拥有的WSDL已经过时,并且您正在看到WSDL中没有的返回类型,那么只需获取新的WSDL,生成另一个客户端类并使用它们。
您必须连接到属于您的服务(客户端和服务器端都是由您开发的)
这是更有趣的部分,这里我们有两种不同的方式:
1,合同第一web服务开发(我更喜欢这个)
您从零开始使用每个操作和复杂类型创建了一个WSDL。您必须创建一个新的BaggageReply复杂类型并修改与此类似的操作(随机wsdl示例):
<message name="GetLastTradePriceInput">
<part name="body" element="xsd1:TradePriceRequest"/>
</message>
<message name="GetLastTradePriceOutput">
<part name="body" element="xsd1:TradePrice"/>
</message>
<portType name="StockQuotePortType">
<operation name="GetLastTradePrice">
<input message="tns:GetLastTradePriceInput"/>
<output message="tns:GetLastTradePriceOutput"/>
</operation>
</portType>键是和定义的类(在输出标记的message属性中)。然后重新生成客户端和服务器端,更新服务器,并正确地实现客户端。
2,代码优先开发(您已经开始编写自己的java类)
在本例中,您是一个熟练的开发人员,非常了解如何做到这一点:)假设您有服务器端代码,我将将输入类(com.amadeus.xml.bla_bla.IdentifyBaggage)重命名为输出类,并更新localName和QName的命名空间、成员、setters/getters等,并将操作的空返回值替换到该类。最后一件事是更新操作或The方法,以便在最后返回一个BaggageReply。当然,你的客户也必须进行修改,才能得到这个答复。
https://stackoverflow.com/questions/58167037
复制相似问题