由于XMLGregorianCalendar,CXF创建的Web服务代码不合法​​?

时间:2014-03-19 17:15:34

标签: java eclipse web-services cxf eclipse-wtp

我有一个WSDL并使用Eclipse中的CXF从它创建了一个Web服务。执行顺利:控制台没有输出,我不知道某处是否有日志,但我找不到。但是在创建的服务接口中,无论使用XMLGregorianCalendar(作为参数还是返回值),我都会从Eclipse中收到此错误:

  

抽象类javax.xml.datatype.XMLGregorianCalendar不能用作运行时类,因为它不是由非抽象类扩展的,它适合作为运行时类

在bean中使用XMLGregorialCalendar只会在界面中引起问题。 WSDL最初是由相同的环境创建的(所以我假设没问题。)

我不知道这个错误意味着什么!它是CXF中的一个错误,我设置错误的设置,还是我现在需要添加一些代码来创建骨架?

2 个答案:

答案 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>

您可以详细了解JAXWS CustomizationCustomizing JAXB Bindings

答案 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>