我有一个WSDL并使用Eclipse中的CXF从它创建了一个Web服务。执行顺利:控制台没有输出,我不知道某处是否有日志,但我找不到。但是在创建的服务接口中,无论使用XMLGregorianCalendar(作为参数还是返回值),我都会从Eclipse中收到此错误:
抽象类javax.xml.datatype.XMLGregorianCalendar不能用作运行时类,因为它不是由非抽象类扩展的,它适合作为运行时类
在bean中使用XMLGregorialCalendar只会在界面中引起问题。 WSDL最初是由相同的环境创建的(所以我假设没问题。)
我不知道这个错误意味着什么!它是CXF中的一个错误,我设置错误的设置,还是我现在需要添加一些代码来创建骨架?
答案 0 :(得分:1)
这是因为您使用默认值。您可以在绑定文件中指定所需的类型。
这是一个示例exert(请注意我如何告诉使用java.util.Date类为" xs:dateTime"):
<jaxws:globalBindings>
<jaxws:javaType name="java.util.Date" xmlType="xs:dateTime"
parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseDateTime"
printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printDateTime" />
<jaxws:javaType name="java.lang.Integer" xmlType="xs:gYear" />
<jaxws:javaType name="java.lang.Integer" xmlType="xs:positiveInteger" />
<jaxws:javaType name="java.lang.Integer" xmlType="xs:integer" />
<jaxws:javaType name="java.lang.Integer" xmlType="xs:int" />
<jaxws:javaType name="java.util.Locale" xmlType="xs:language" />
</jaxws:globalBindings>
答案 1 :(得分:1)
这是CXF生成的实际绑定文件(如果它可以帮助任何人):
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="example_schema1.xsd" node="/xs:schema">
<jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:javaType name="java.util.Date" xmlType="xs:dateTime"
parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime"
printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime"/>
</jxb:globalBindings>
</jxb:bindings>
</jxb:bindings>