2014-03-19 24 views
2

我有一個WSDL,並在Eclipse中使用CXF創建了一個Web服務。執行進行得很順利:控制檯中沒有輸出,我不知道是否有某個日誌存在,但我找不到。但是,在創建的服務接口,隨處可見的的XMLGregorianCalendar使用(作爲參數或者返回值),我從Eclipse中得到這個錯誤:CXF創建的Web服務代碼由於XMLGregorianCalendar而不合法?

抽象類javax.xml.datatype.XMLGregorianCalendar中不能用作運行時類因爲它沒有被適合作爲運行時類的非抽象類擴展

在Bean中使用XMLGregorialCalendar導致沒有問題,只是在接口中。 WSDL最初是由相同的環境創建的(所以我假設沒問題)。

我不知道這個錯誤是什麼意思!它是CXF中的一個錯誤,我設置了錯誤的設置,還是現在需要添加的代碼,現在創建了框架?

回答

1

發生這種情況是因爲您使用了默認值。你可以在綁定文件中指定你想要的類型。

下面是一個例子使出(注意我是如何告訴使用java.util.Date類爲 「XS:日期時間」):

<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

+0

好的,這是一種自動化的方式來做我手動修復問題的方法,謝謝。但這意味着默認值是錯誤的!爲什麼使用產生錯誤代碼的默認值?這不是一種奇特的類型。 – Frigg

+0

我想通了。原始的WSDL是用CXF創建的,它創建了一個外部綁定文件來修復日期問題,但我沒有。 – Frigg

+0

@Frigg你在哪裏查找外部綁定文件? – kozla13

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> 
+0

你在哪裏找到該文件? – kozla13