繁体   English   中英

从JAXB带注释的类生成正确的SOAP XML结构

[英]generating the right SOAP XML structure from a JAXB annotated class

从最后列出的ProcessRequestBean类生成,
这是我得到的:

<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;
}
}

感谢所有帮助

请尝试对您的SEI和ProcessRequestBean类进行以下更改,

精工

@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) {

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

让我知道它是否不能解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM