gpt4 book ai didi

java - 生成了错误的 SOAP 请求

转载 作者:数据小太阳 更新时间:2023-10-29 02:43:35 26 4
gpt4 key购买 nike

我已经使用这个 answer 生成了 WSDL 客户端对于我的 WSDL。 stub 已成功生成,但是当我调用服务器时,出现以下错误消息

undeclared namespace prefix SOAP-ENV at offset 216 of http://10.7.225.35:30002/kestrel/AirService

This is to stop the scroll bar obscuring the text


生成请求时,我可以看到 targetnamespaces 添加到 body 标记而不是 soapEnvelope 标记中,如果我手动更改它并在 SOAPUI 工具中尝试它,它就像 charm 一样工作。我也尝试从 wsimport 生成客户端,但遇到了类似的问题。附上请求和响应以供引用。同时附上wsdl文件。
附加 WSDL 文件(所以不允许我添加全部所以添加部分)提前致谢,如有任何帮助,我们将不胜感激。

无线 WSDL 文件

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="AirService"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.travelport.com/service/air_v46_0"
xmlns:ns1="http://www.travelport.com/schema/air_v46_0"
targetNamespace="http://www.travelport.com/service/air_v46_0">

<import namespace="http://www.travelport.com/service/air_v46_0"
location="AirAbstract.wsdl" />

<binding name="AirPrePayBinding"
type="tns:AirPrePayPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="service">
<soap:operation soapAction="http://localhost:8080/kestrel/AirService"/>
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="ErrorInfoMsg">
<soap:fault name="ErrorInfoMsg" use="literal" />
</fault>

</operation>
</binding>

AirAbstract.wsdl

<?xml version="1.0" encoding="UTF-8"?>

<definitions name="AirService"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.travelport.com/service/air_v46_0"
xmlns:ns1="http://www.travelport.com/schema/air_v46_0"
targetNamespace="http://www.travelport.com/service/air_v46_0">

<import namespace="http://www.travelport.com/service/air_v46_0"
location="AirAbstract.wsdl" />

<binding name="AirPrePayBinding"
type="tns:AirPrePayPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="service">
<soap:operation soapAction="http://localhost:8080/kestrel/AirService"/>
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="ErrorInfoMsg">
<soap:fault name="ErrorInfoMsg" use="literal" />
</fault>

</operation>
</binding>

请求

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header />
<S:Body xmlns:ns1="http://www.travelport.com/schema/air_v46_0" xmlns:ns2="http://www.travelport.com/schema/common_v46_0" xmlns:ns3="http://www.travelport.com/schema/vehicle_v46_0" xmlns:ns4="http://www.travelport.com/schema/rail_v46_0" xmlns:ns5="http://www.travelport.com/schema/cruise_v46_0" xmlns:ns6="http://www.travelport.com/schema/hotel_v46_0" xmlns:ns7="http://www.travelport.com/schema/passive_v46_0" xmlns:ns8="http://www.travelport.com/schema/universal_v46_0" xmlns:ns9="http://www.travelport.com/soa/common/security/SessionContext_v1">
<ns1:LowFareSearchReq ReturnUpsellFare="true" TargetBranch="P7111432">
<ns2:BillingPointOfSaleInfo OriginApplication="UAPI" />
<ns1:SearchAirLeg>
<ns1:SearchOrigin>
<ns2:CityOrAirport Code="BLR" />
</ns1:SearchOrigin>
<ns1:SearchDestination>
<ns2:CityOrAirport Code="JAI" />
</ns1:SearchDestination>
<ns1:SearchDepTime PreferredTime="2019-03-22" />
<ns1:AirLegModifiers>
<ns1:PermittedCabins>
<ns2:CabinClass Type="Economy" />
</ns1:PermittedCabins>
</ns1:AirLegModifiers>
</ns1:SearchAirLeg>
<ns1:AirSearchModifiers>
<ns1:PreferredProviders>
<ns2:Provider Code="1G" />
</ns1:PreferredProviders>
</ns1:AirSearchModifiers>
<ns2:SearchPassenger Code="ADT" />
<ns2:SearchPassenger Code="INF" PricePTCOnly="true" />
<ns2:SearchPassenger Code="CNN" />
<ns1:AirPricingModifiers CurrencyType="INR" FaresIndicator="AllFares" />
</ns1:LowFareSearchReq>
</S:Body>
</S:Envelope>

响应

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header />
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<SOAP-ENV:faultcode>500</SOAP-ENV:faultcode>
<SOAP-ENV:faultstring>undeclared namespace prefix SOAP-ENV at offset 216 of http://10.7.225.35:30002/kestrel/AirService</SOAP-ENV:faultstring>
<SOAP-ENV:faultactor></SOAP-ENV:faultactor>
<SOAP-ENV:detail>undeclared namespace prefix SOAP-ENV at offset 216 of http://10.7.225.35:30002/kestrel/AirService</SOAP-ENV:detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

最佳答案

在 SOAP 请求中,SOAP-ENV 的命名空间是 S 命名空间的副本。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header />
<S:Body xmlns:ns1="http://www.travelport.com/schema/air_v46_0" >

... snip ...

</S:Envelope>

我猜解析器不喜欢重复的命名空间前缀,所以更改请求以使用 S 作为 header 的前缀(或者删除它,因为它没有填充)

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" >    
<S:Header />
<S:Body xmlns:ns1="http://www.travelport.com/schema/air_v46_0" >

</S:Envelope>

至于其他命名空间,在文档中的何处声明命名空间并不重要,只要它们在使用前声明即可。

如果您发布由 CXF 生成的 stub 代码,那么我们可能可以确定问题所在。

关于java - 生成了错误的 SOAP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53612977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com