2014-06-23 57 views
0

從末尾列出的ProcessRequestBean類生成,正確的SOAP XML結構
這就是我得到:
產生從JAXB註解類

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cel="http://www.myweb.com"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <cel:processRequestOp> 
     <processReq> 
      <!--Optional:--> 
      <serviceID> 1 </serviceID> 
      <!--Zero or more repetitions:--> 
      <parameter> 
       <!--Optional:--> 
       <name> myname </name> 
       <!--Optional:--> 
       <value> myvalue </value> 
      </parameter> 
     </processReq> 
    </cel:processRequestOp> 
    </soapenv:Body> 
</soapenv:Envelope> 

但是,這是我想要的東西:是從該結構消除

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cel="http://www.myweb.com"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <cel:processRequestOp> 
      <!--Optional:--> 
      <serviceID>1</serviceID> 
      <!--Zero or more repetitions:--> 
      <parameter> 
       <!--Optional:--> 
       <name> myname </name> 
       <!--Optional:--> 
       <value> myvalue </value> 
      </parameter> 
     </cel:processRequestOp> 
     </soapenv:Body> 
    </soapenv:Envelope> 

筆記,所述EXTA父(processReq)元素。

我SEI看起來像這樣:

@WebService(name="QueryThirdParty", targetNamespace = "http://www.myweb.com") 
@SOAPBinding(style = Style.RPC) 
public interface QuerySEI { 

public static final String targetNS = "http://www.myweb.com"; 

@WebMethod(operationName = "processRequestOp", action = "get_them") 
@RequestWrapper(className = "biz.webservice.query3rdpartyaccount.ProcessRequestBean", localName = "localName", partName = "partName") 
@ResponseWrapper(className = "biz.webservice.query3rdpartyaccount.ProcessResponseBean") 
@WebResult(partName = "processResp", name = "processRequestResponse") 
public ProcessResponseBean getAccountNumbers(@WebParam(partName = "processReq", name = "ProcessRequestBean", mode = Mode.IN) ProcessRequestBean request); 

} 

和ProcessRequestBean類看起來像這樣:

@XmlRootElement(name = "processRequest") //the name of the XML root element 
@XmlType(propOrder = {"serviceID", "parameter"}) 
public class ProcessRequestBean { 

private String serviceID; 

private List<RequestParameterElement> parameter; 

public ProcessRequestBean(String serviceID, List<RequestParameterElement> parameter) { 
    this.serviceID = serviceID; 
    this.parameter = parameter; 
} 

public ProcessRequestBean() { 
} 

@XmlElement(name = "serviceId")//xml name of this property 
public String getServiceID() { 
    return serviceID; 
} 

public void setServiceID(String serviceID) { 
    this.serviceID = serviceID; 
}  

@XmlElement(name = "parameter") 
public List<RequestParameterElement> getParameter() { 
    return parameter; 
} 

public void setParameter(List<RequestParameterElement> parameter) { 
    this.parameter = parameter; 
} 
} 

所有幫助表示讚賞

+0

所以你想元素走了?我認爲你可以從你的'ProcessResponseBean'中刪除'partName =「processReq」'我不確定這是否會幫助你。另外我看到你爲SEI課程增加了很多額外的選項。允許Netbeans生成Web服務類在默認的SOAP客戶端實現中應該沒有問題。 –

+0

@ j.con這樣做只會將partName更改爲ProcessRequestBean(默認值)。它沒有擺脫(processReq)元素 – Arthur

回答

0

請嘗試以下昌ES在烏爾SEI和ProcessRequestBean類,

SEI

@WebResult(partName = "processResp", name = "processRequestResponse") 
public ProcessResponseBean getAccountNumbers(ProcessRequestBean request); 

} 

ProcessRequestBean類

擺脫@XmlRootElement(name = 「的processRequest」)標註的..

 @XmlAccessorType(XmlAccessType.FIELD)  
     @XmlType(propOrder = {"serviceID", "parameter"}) 
public class ProcessRequestBean { 

private String serviceID; 

private List<RequestParameterElement> parameter; 

public ProcessRequestBean(String serviceID, List<RequestParameterElement> parameter) { 

...... 
...... 
...... 

讓我知道如果它不能解決你的問題。

+0

'name'和'value'是'parameter'的子元素。這樣我就不會得到'參數'元素。你可以扔更多的光 – Arthur

+0

編輯我的答案。在ur類中添加XmlAccessorType註解,去掉XmlRootElement註解並從你的頁面中移除webparam。 – kingAm

+0

我嘗試了您的解決方案,但不幸的是,它消除了元素,並引入了元素的默認元素 Arthur