关于XSD自定义元素类型及SOAP WebService响应Bean生成XSD的问询
SOAP WebService响应Bean与XSD自定义元素类型技术咨询
提供的AddResponse响应Bean代码
@XmlRootElement(name = "AddResponse") public class AddResponse { Integer addResult; /** * @return the addResult */ @XmlElement(name = "AddResult") public Integer getAddResult() { return addResult; } /** * @param addResult the addResult to set */ public void setAddResult(Integer addResult) { this.addResult = addResult; } }
生成的XSD片段
<xs:schema xmlns:tns="http://controller.ws.sella.it/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"> <!-- 完整XSD内容省略 --> </xs:schema>
针对你咨询的XSD自定义元素类型相关技术问题,我结合你的实际场景整理了实用的要点和操作示例:
自定义简单类型:如果需要对基础数据类型做约束(比如限制整数范围、字符串格式),可以通过
<xs:simpleType>来定义。比如要给AddResult指定一个1-1000的整数范围,对应的XSD片段可以这么写:<xs:simpleType name="LimitedInteger"> <xs:restriction base="xs:int"> <xs:minInclusive value="1"/> <xs:maxInclusive value="1000"/> </xs:restriction> </xs:simpleType>之后就可以把
AddResult的类型指定为这个自定义类型。自定义复杂类型:如果需要组合多个元素或属性形成新的结构,就用
<xs:complexType>。比如你现在的AddResponse就是一个简单的复杂类型,要是想扩展它增加状态信息,XSD可以这么定义:<xs:complexType name="AddResponseType"> <xs:sequence> <xs:element name="AddResult" type="tns:LimitedInteger"/> <xs:element name="Status" type="xs:string" default="SUCCESS"/> </xs:sequence> </xs:complexType>对应的Java Bean也需要添加对应的字段和
@XmlElement注解来映射。Java Bean与自定义XSD的映射调整:如果要让你的
AddResponse对应自定义的XSD复杂类型,需要修改JAXB注解。比如指定根元素的类型:@XmlRootElement(name = "AddResponse", namespace = "http://controller.ws.sella.it/") @XmlType(name = "AddResponseType", namespace = "http://controller.ws.sella.it/") public class AddResponse { // 字段和方法保持不变,或新增对应自定义类型的字段 }自定义类型的复用与命名空间管理:定义好的自定义类型可以在XSD的多个元素中引用,比如
<xs:element name="AnotherResponse" type="tns:AddResponseType"/>,同时要注意命名空间的一致性,你的XSD里的tns命名空间要和Java注解里的namespace属性对应,避免解析冲突。
内容的提问来源于stack exchange,提问作者user2779544
相关产品推荐
相关产品推荐

