以上就是给各位分享web-services–使用JAXB和JAXWSAnnotations将枚举属性编组到XML中,其中也会对枚举类中添加属性进行解释,同时本文还将给你拓展JacksonJAXBAnn
以上就是给各位分享web-services – 使用JAXB和JAXWS Annotations将枚举属性编组到XML中,其中也会对枚举类中添加属性进行解释,同时本文还将给你拓展Jackson JAXB Annotations 2.6.2 发布、java – 来自Webservice编组错误的JAXB类、javax.xml.bind.annotation.XmlAccessOrder的实例源码、javax.xml.bind.annotation.XmlAccessorOrder的实例源码等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- web-services – 使用JAXB和JAXWS Annotations将枚举属性编组到XML中(枚举类中添加属性)
- Jackson JAXB Annotations 2.6.2 发布
- java – 来自Webservice编组错误的JAXB类
- javax.xml.bind.annotation.XmlAccessOrder的实例源码
- javax.xml.bind.annotation.XmlAccessorOrder的实例源码
web-services – 使用JAXB和JAXWS Annotations将枚举属性编组到XML中(枚举类中添加属性)
import javax.xml.bind.annotation.XmlAccesstype; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @XmlAccessorType(XmlAccesstype.FIELD) public enum ReturnCode { OK(0,"Ok"),ERROR_VALIDATION(1,"Validation Error"),ERROR_TRANSPORT(2,"Transport Error"),ERROR_CASE_01(101,"Business situation #01"),ERROR_CASE_02(102,"Business situation #02"),ERROR_CASE_03(103,"Business situation #03"); @XmlElement(nillable=false,required=true) private Integer code = 0; @XmlElement(nillable=false,required=true) private String message = null; private ReturnCode(Integer code,String message) { this.code = code; this.message = message; } public Integer getCode() { return code; } public String getMessage() { return message; } }
我正在使用Apache CXF和生成的WSDL,正如预期的那样,将上述枚举转换为限制:
<xsd:simpleType name="ReturnCode"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="OK"/> <xsd:enumeration value="ERROR_VALIDATION"/> <xsd:enumeration value="ERROR_TRANSPORT"/> <xsd:enumeration value="ERROR_CASE_01"/> <xsd:enumeration value="ERROR_CASE_02"/> <xsd:enumeration value="ERROR_CASE_03"/> </xsd:restriction> </xsd:simpleType>
到目前为止这么好,这是一个理想的功能.我自己记得在Apache CXF之前与这样的结构挣扎(当我使用XFire时).
但是,这不是这种情况.我想产生不同的结果.我希望将枚举转换为复杂类型,并且在编组包含此枚举实例的对象时,将属性代码和消息都转换为XML元素.我只希望它不像enum那样表现.我知道如果我使用普通类而不是枚举,我可以实现这一目标.但是,我非常希望保持枚举,所以我在代码的java部分保持类型安全.
如果生成的WSDL仍然可能对可能的值有限制,那么它将是完美的场景.但是,我可以没有它.这里最重要的是保持Java 1.5枚举,同时仍然编组(并生成WSDL)ReturnCode作为复杂类型,代码和消息作为其元素.
我尝试用枚举源代码中的给定JAXWS Annotations提示.是否有可能通过那些(或其他一些)注释来实现这一点?或者我是否必须编写自定义marshaller / unmarshaller和WSDL生成器?
非常感谢你!
最好的祝福,
Filipe Fedalto
解决方法
例:
@WebMethod public ComplexType GetInfo(){ ReturnCode response; response = ReturnCode.OK; ComplexType wsResponse; wsResponse = response.toComplexType() return wsResponse; } @WebMethod public void PutInfo(ComplexType input){ ReturnCode request = ReturnCode.fromComplexType(input); //more code }
Jackson JAXB Annotations 2.6.2 发布
Jackson JAXB Annotations 2.6.2 发布,此版本更新内容如下:
#47: JaxbAnnotationIntrospector does not pick up ''required'' property of @XmlAttribute
(reported by phantomjinx@github)
下载:https://github.com/FasterXML/jackson-module-jaxb-annotations/releases。
java – 来自Webservice编组错误的JAXB类
wsimport -d src/main/java -keep -extension -p my.package http://www.OpenLigaDB.de/Webservices/Sportsdata.asmx?WSDL
我将演示这个类的问题(我自己只添加了@XmlRootElement):
package my.package; import javax.xml.bind.annotation.XmlAccesstype; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccesstype.FIELD) @XmlType(name = "Sport",propOrder = {"sportsID","sportsName"}) @XmlRootElement(name = "sport") //Added by myself public class Sport { protected int sportsID; protected String sportsName; public int getSportsID() {return sportsID;} public void setSportsID(int value) {this.sportsID = value;} public String getSportsName() {return sportsName;} public void setSportsName(String value) {this.sportsName = value;} }
直接实例化和编组工作正常(例1)
Sport sport = new Sport(); sport.setSportsID(1); sport.setSportsName("test"); JAXBContext jc = JAXBContext.newInstance(Sport.class); jc.createMarshaller().marshal(sport,System.out);
现在让我们在webservice调用中创建对象:
SportsdataSoap s = new Sportsdata().getSportsdataSoap(); ArrayOfSport sports = s.getAvailSports(); for(Sport sport : sports.getSport()) { JAXBContext jc = JAXBContext.newInstance(Sport.class); jc.createMarshaller().marshal(sport,System.out); }
然后我得到了这个例外:
Exception in thread "main" java.lang.classCastException: my.package.Sport$JaxbAccessorF_sportsID cannot be cast to com.sun.xml.bind.v2.runtime.reflect.Accessor at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:199) at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:191) at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:282) at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:94) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:128) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:183) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getorCreate(JAXBContextImpl.java:526) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:341) at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1158) at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:140) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202) at javax.xml.bind.ContextFinder.find(ContextFinder.java:363) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522) at my.package.TestOpenLiga.testdisciplines(TestOpenLiga.java:48) at my.package.TestOpenLiga.main(TestOpenLiga.java:130)
怎么处理这个?谢谢你,托尔.
更新2如果我修改Example1到此,我得到相同的错误
SportsdataSoap s = new Sportsdata().getSportsdataSoap(); Sport sport = new Sport(); sport.setSportsID(1); sport.setSportsName("test"); JAXBContext jc = JAXBContext.newInstance(Sport.class); jc.createMarshaller().marshal(sport,System.out);
更新2体育的XML结构
<Sport> <sportsID>int</sportsID> <sportsName>string</sportsName> </Sport>
解决方法
javax.xml.bind.annotation.XmlAccessOrder的实例源码
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
javax.xml.bind.annotation.XmlAccessorOrder的实例源码
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
/** * Gets the accessor order for this class by consulting {@link XmlAccessorOrder}. */ private XmlAccessOrder getAccessorOrder() { XmlAccessorOrder xao = getClassOrPackageAnnotation(XmlAccessorOrder.class); if(xao!=null) return xao.value(); else return XmlAccessOrder.UNDEFINED; }
我们今天的关于web-services – 使用JAXB和JAXWS Annotations将枚举属性编组到XML中和枚举类中添加属性的分享就到这里,谢谢您的阅读,如果想了解更多关于Jackson JAXB Annotations 2.6.2 发布、java – 来自Webservice编组错误的JAXB类、javax.xml.bind.annotation.XmlAccessOrder的实例源码、javax.xml.bind.annotation.XmlAccessorOrder的实例源码的相关信息,可以在本站进行搜索。
本文标签: