日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java wsdl 参数必填设置

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:其次是根結點下的元素。

<xs:element minOccurs="0" name="data" type="xs:string"/>

調整

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 参数必填设置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。