java wsdl 参数必填设置
原來的wsdl
<xs:complexType name="SyncPartTraceProcess"> <xs:sequence> <xs:element minOccurs="0" name="OrderMasterData" type="tns:partTraceWrap"/> </xs:sequence> </xs:complexType> <xs:complexType name="partTraceWrap"> <xs:complexContent> <xs:extension base="tns:baseWrap"> <xs:sequence> <xs:element minOccurs="0" name="data" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="baseWrap"> <xs:sequence> <xs:element minOccurs="0" name="key" type="xs:string"/> </xs:sequence> </xs:complexType>修改要求
下面是調用方給的截圖,參數是0…1,表示可空,業務方要求使用1…1
分析
從wsdl看來,關鍵是minOccurs="0"表示0…1,只要把它去掉,或者修改成 `minOccurs="1"即可, 那怎么去修改呢?
1:首先根結點
<xs:element minOccurs="0" name="OrderMasterData" type="tns:partTraceWrap"/>OrderMasterData這個是根參數里面的。
2:其次是根結點下的元素。
調整
1:根結代碼調整。
import com.ly.mp.swcas.main.wrap.*; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.bind.annotation.XmlElement; import java.text.ParseException;@WebService(name = "SwcasService") public interface SwcasService {@WebMethod@WebResult(name = "WsResult", targetNamespace = "")WsResult SyncPartTraceProcess(@WebParam(name = "OrderMasterData") @XmlElement(required = true) PartTraceWrap data) throws ParseException;}PS:在方法的參數上添加@XmlElement(required = true),表示這個參數是必填的。
2:葉結代碼調整。葉結點實際上是上面PartTraceWrap 參數實體的一個屬性。調整如下
package com.ly.mp.swcas.main.wrap;import javax.xml.bind.annotation.*; import java.io.Serializable;@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class PartTraceWrap extends BaseWrap implements Serializable {private static final long serialVersionUID = -6763186241763563647L;@XmlElement(required = true)private String data="";public String getData() {return data;}public void setData(String data) {this.data = data;} }PS:在data字段添加上@XmlElement(required = true)注解,在類PartTraceWrap上添加 @XmlRootElement注解。
注意,兩個注釋都必在有,只添加字段注釋,項目是啟動不了的。
3:修改完成,看一下重新生成的wsdl效果,已然生效。
<xs:complexType name="SyncPartTraceProcess"> <xs:sequence> <xs:element name="OrderMasterData" type="tns:partTraceWrap"/> </xs:sequence> </xs:complexType> <xs:complexType name="partTraceWrap"> <xs:complexContent> <xs:extension base="tns:baseWrap"> <xs:sequence> <xs:element name="data" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="baseWrap"> <xs:sequence> <xs:element minOccurs="0" name="key" type="xs:string"/> </xs:sequence> </xs:complexType>總結
關鍵是 @XmlElement(required = true) 注解,把原代碼關鍵部分抽出來。如下
@Retention(RUNTIME) @Target({FIELD, METHOD, PARAMETER}) public @interface XmlElement {String name() default "##default";boolean nillable() default false;/*** Customize the element declaration to be required.* <p>If required() is true, then Javabean property is mapped to* an XML schema element declaration with minOccurs="1".* maxOccurs is "1" for a single valued property and "unbounded"* for a multivalued property.* <p>If required() is false, then the Javabean property is mapped* to XML Schema element declaration with minOccurs="0".* maxOccurs is "1" for a single valued property and "unbounded"* for a multivalued property.*/boolean required() default false;String namespace() default "##default";String defaultValue() default "\u0000";Class type() default DEFAULT.class;static final class DEFAULT {} }1:從代碼的注釋可以看到,required 值對應 minOccurs值為: false : 0 ;true : 1。
2:本注解 使用了 @Retention(RUNTIME) @Target({FIELD, METHOD, PARAMETER}) 注解,表示可以用于字段,方法,參數。
總結
以上是生活随笔為你收集整理的java wsdl 参数必填设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fcntl设置FD_CLOEXEC
- 下一篇: 防范于未“燃”|涂鸦智慧社区推出“黑科技