2017-04-18 7 views
1

私は消費する必要のあるSOAPエンドポイントを持っています。 Javaコードの生成は、maven plugin-wsimportで行います。問題は、エンドポイントがそれ以外の有効な要求で不良データを返すことです。いくつかのタグにのみJAXB名前空間

<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>SSS</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は、タグに埋め込まれています。 XMLNSプレフィックスを手動でpackage-info.javaを変更し、追加した後の要素が定義されていないため、生成された要求は再び「BadData」内のすべての要素、その結果を「UPD」接頭辞を追加

@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/") 
     }) 

その型には埋め込まれています。

<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"を追加する必要がありますが、その属性の前には追加しないでください。

答えて

0

さまざまなソリューションを試してみた結果、質問を投稿してから数分後に回答が見つかりました... elementFormDefaultをXmlNsForm.UNSETからXmlNsForm.QUALIFIEDに変更しました。今度はwsimport maven pluginをpackage-info.javaファイルをこのように生成させる必要があります。

@javax.xml.bind.annotation.XmlSchema(
     namespace = "http://www.vivacom.bg/UpdateBAInvoiceInfo/", 
     elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNSET) 
関連する問題