2011-05-09 152 views
10

我使用JAXB和CXF創建了一個WSDL第一個webservice。我不擁有WSDL,因此我無法對其進行更改。我使用ftp://ftp.ihe.net/TF_Implementation_Material/ITI/wsdl/PIXManager.wsdl作爲我的WSDL。我使用CXF 2.3.0來生成Java類。JAXB,CXF:沒有ObjectFactory和元素@XmlElementDecl ...

Java類代都很好,但是當我試圖在Web應用程序中運行這個,我得到一個錯誤

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 17 counts of IllegalAnnotationExceptions 

的17個計數格式

There's no ObjectFactory with an @XmlElementDecl for the element {urn:hl7-org:v3}assignedDevice. 
     this problem is related to the following location: 
      at protected javax.xml.bind.JAXBElement org.hl7.v3.QUQIMT021001UV01AuthorOrPerformer.assignedDevice 

當我去提到的類,即QUQIMT021001UV01AuthorOrPerformer和實地考察一下assignedDevice,我看到這個

@XmlElementRef(name = "assignedDevice", namespace = "urn:hl7-org:v3", type = JAXBElement.class) 
protected JAXBElement<COCTMT090300UV01AssignedDevice> assignedDevice; 

當我看包的ObjectFactory的,我看到這個

private final static QName _COCTMT090303UV01AssignedDeviceAssignedDevice_QNAME = new QName("urn:hl7-org:v3", "assignedDevice"); 

我所有的17個錯是相似的。我可以在我的代碼或運行時執行什麼操作以獲得我的服務?

+1

我在我的codegen中使用了多個WSDL,並且這導致了這些定義中的衝突。我將其修剪爲一個WSDL並且工作正常。不過,我想看看如何使用codegen中使用的多個WSLD。 – rahul 2011-05-10 22:52:26

回答

3

您在運行時使用了哪個Java版本?與Java 6.運行時,我曾與OTA模式類似的問題,我通過提出以下更改Maven配置消除了問題:

  1. 使用JAXB 2.1 IMPL(而不是2.2)*與provided範圍,匹配Java 6中包含的JAXB版本。
  2. 使用JAX-WS 2.1(而不是2.2)來匹配Java 6和JAXB 2.1.x.
  3. 將選項frontEnd添加到Maven cxf-codegen-plugin插件並將其設置爲jaxws21(或者如果在命令行上使用wsdl2java,則使用「-fe jaxws21」選項)。
+0

感謝您的想法。我嘗試了這些東西,最後決定取消Java/CXF來處理這些服務。我決定創建一個使用GroovyGoodness™Xml處理的基於Groovy的Spring控制器。 – rahul 2011-06-09 03:12:51

1

當您生成類時,還會生成一個名爲jaxb.properties的文件。確保該文件在運行時可供應用程序訪問。 我有同樣的問題,這是由於maven包裝:maven不會包含在src/main/java樹下的包資源文件(如jaxb.properties)中,除非有特別指示。我使用帶添加資源目標的org.codehaus.mojo:build-helper-maven-plugin來完成此操作。 希望這可以幫助

0

我面對這種類似的錯誤,原因是Web服務生成的存根java類之間有衝突。

如果上述答案無效,請嘗試尋找衝突。

一次添加一個存根並逐漸添加。

希望它有幫助