Jboss JAXB-WS-使用@WebMethod强制字段
我有一个@WebMethod调用Jboss JAXB-WS-使用@WebMethod强制字段,jboss,annotations,jax-ws,Jboss,Annotations,Jax Ws,我有一个@WebMethod调用 @WebMethod public int cancelCampaign(String campaignId, String reason); 我想将“活动ID”字段标记为必填字段。我不知道该怎么做 我使用的是JBOSS 7.1服务器。使用JAX-WS的唯一方法是编写一些包装类,在XmlElement注释上指定required=true标志。您的请求元素应该如下所示: @XmlType(name="YourRequestType", propOrder={"c
@WebMethod
public int cancelCampaign(String campaignId, String reason);
我想将“活动ID”字段标记为必填字段。我不知道该怎么做
我使用的是JBOSS 7.1服务器。使用
JAX-WS
的唯一方法是编写一些包装类,在XmlElement
注释上指定required=true
标志。您的请求元素应该如下所示:
@XmlType(name="YourRequestType", propOrder={"campaignId", "reason"})
public class YourRequest {
@XmlElement(name="campaignId", required=true)
private String campaignId;
@XmlElement(name="reason", required=false)
private String reason;
//Getters and setters
}
@WebMethod
public int cancelCampaign(@WebParam(name = "request") YourRequest request) {
String campaignId = request.getCampaignId();
return 0;
}
您的web方法应该如下所示:
@XmlType(name="YourRequestType", propOrder={"campaignId", "reason"})
public class YourRequest {
@XmlElement(name="campaignId", required=true)
private String campaignId;
@XmlElement(name="reason", required=false)
private String reason;
//Getters and setters
}
@WebMethod
public int cancelCampaign(@WebParam(name = "request") YourRequest request) {
String campaignId = request.getCampaignId();
return 0;
}
这将告诉
JAXB
在XSD
中为activitid
元素生成minOccurs=1
。我有一个类似的需求,我注意到我从SoapUI得到了
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:bus="http://business.test.com/">
<soapenv:Header/>
<soapenv:Body>
<!-- optional -->
<bus:addItem>
<bus:item>
<id>?</id>
<!-- optional -->
<name>?</name>
</bus:item>
<!-- optional -->
<itemType>?</itemType>
</bus:addItem>
</soapenv:Body>
</soapenv:Envelope>
在我的例子中,我必须对所需的WebMethod参数和所有所需自定义类型的getter执行此操作,如下所示:
在Web服务中:
对于我设置为required=true的元素,JAXB将删除minOccurs属性。对于required=false,minOccurs保持存在并设置为0。缺少的minOccurs属性是否表示它是必填字段?我在@XmlElement中发现的另一个关于required=true的信息是,这种方法会为我生成一个可选的YourRequest元素(尽管它具有强制属性/类型)。
...
@WebMethod( operationName = "getItems" )
@WebResult( name = "item" )
public List<Item> getItems(
@WebParam( name = "itemType" ) @XmlElement( required = true ) String itemType );
...
@XmlAccessorType(XmlAccessType.FIELD)
public class Item implements Serializable
{
private static final long serialVersionUID = 1L;
@XmlElement( required = true )
private int id;
@XmlElement( required = true )
private String name;
/**
* Default constructor.
*/
public Item() { }
/**
* @return the id
*
*/
public int getId()
{
return id;
}
/* setter for id */
/**
* @return the name
*/
public String getName()
{
return name;
}
/* setter for name */
}