我有一个需要使用的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>[email protected]</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>[email protected]</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>[email protected]</upd:eMail1>
<upd:InputRequestID>NMS2513334601</upd:InputRequestID>
<upd:InputTimeStamp>20170202131615154</upd:InputTimeStamp>
</upd:UpdBAInvoiceInfoRequest>
</S:Body>
</S:Envelope>
我需要在BillingAccountCode之前添加“ 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)