gpt4 book ai didi

java - JAXB 命名空间仅适用于某些标签

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:07 25 4
gpt4 key购买 nike

我有一个需要使用的 SOAP 端点。 java 代码生成是通过 maven 插件 - wsimport 完成的。问题在于端点返回了错误的数据,而其他方面的请求却是有效的。以下是通过的请求的示例:

<soapenv:Envelope     
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:upd="http://www.vivacom.bg/UpdateBAInvoiceInfo/">
<soapenv:Header/>
<soapenv:Body>
<upd:UpdBAInvoiceInfoRequest>
<BillingAccountCode>10122190001</BillingAccountCode>
<SSOGUID>1234567</SSOGUID>
<RequestedInvoiceType>E</RequestedInvoiceType>
<eMail1>govcharov@abv.bg</eMail1>
<InputRequestID>SSS0123456789</InputRequestID>
<InputTimeStamp>20170202131615154</InputTimeStamp>
</upd:UpdBAInvoiceInfoRequest>
</soapenv:Body>
</soapenv:Envelope>

这里“upd”前缀是在顶层定义的。但是,JAXB 生成此请求:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<UpdBAInvoiceInfoRequest
xmlns="http://www.vivacom.bg/UpdateBAInvoiceInfo/">
<BillingAccountCode>10122190001</BillingAccountCode>
<SSOGUID>1234567</SSOGUID>
<RequestedInvoiceType>E</RequestedInvoiceType>
<eMail1>govcharov@abv.bg</eMail1>
<InputRequestID>NMS2081417920</InputRequestID>
<InputTimeStamp>20170202131615154</InputTimeStamp>
</UpdBAInvoiceInfoRequest>
</S:Body>
</S:Envelope>

缺少“upd”限定符,并且 xmlns 嵌入在标记中。手动修改package-info.java并添加Xmlns前缀后

@javax.xml.bind.annotation.XmlSchema(namespace = 
"http://www.vivacom.bg/UpdateBAInvoiceInfo/",
elementFormDefault = XmlNsForm.QUALIFIED,
attributeFormDefault = XmlNsForm.UNSET,
xmlns = {
@XmlNs(prefix="upd",
namespaceURI="http://www.vivacom.bg/UpdateBAInvoiceInfo/")
})

生成的请求向所有元素添加“upd”前缀,并再次生成“BadData”,因为这些元素未在命名空间中定义,而是针对该类型嵌入的。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<upd:UpdBAInvoiceInfoRequest
xmlns:as="http://www.vivacom.bg/UpdateBAInvoiceInfo/">

<upd:BillingAccountCode>10122190001</upd:BillingAccountCode>
<upd:SSOGUID>1234567</upd:SSOGUID>
<upd:RequestedInvoiceType>E</upd:RequestedInvoiceType>
<upd:eMail1>govcharov@abv.bg</upd:eMail1>
<upd:InputRequestID>NMS2513334601</upd:InputRequestID>
<upd:InputTimeStamp>20170202131615154</upd:InputTimeStamp>
</upd:UpdBAInvoiceInfoRequest>
</S:Body>
</S:Envelope>

我需要在 BillingAccountCode 之前添加“upd”,但不在其属性之前添加“upd”。

最佳答案

经过几个小时尝试不同的解决方案后,我在发布问题几分钟后找到了答案......我将 elementFormDefault 从 XmlNsForm.QUALIFIED 更改为 XmlNsForm.UNSET,它生成的正是我所需要的。现在我需要让 wsimport maven 插件以这种方式生成 package-info.java 文件。

@javax.xml.bind.annotation.XmlSchema(
namespace = "http://www.vivacom.bg/UpdateBAInvoiceInfo/",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNSET)

关于java - JAXB 命名空间仅适用于某些标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43470581/

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