欢迎访问 生活随笔!

生活随笔

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

编程问答

java wsdl 参数必填设置

发布时间:2024/3/13 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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 参数必填设置的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。