JAXB,CXF:没有ObjectFactory和元素的@XmlElementDecl ...

时间:2011-05-09 16:24:30

标签: java wsdl jaxb cxf

我正在使用JAXB和CXF创建WSDL第一个Web服务。我没有WSDL,所以我不能对它进行更改。我使用ftp://ftp.ihe.net/TF_Implementation_Material/ITI/wsdl/PIXManager.wsdl作为我的WSDL。我使用CXF 2.3.0生成Java类。

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个错误都是相似的。在我的codegen或运行时期间,我可以做些什么来使我的服务工作?

3 个答案:

答案 0 :(得分:3)

您在运行时使用的Java版本是什么?在使用Java 6运行时,我遇到了与OTA模式类似的问题。我通过对Maven配置进行以下更改来消除此问题:

  1. 使用带有provided作用域的JAXB impl 2.1。*(而不是2.2)来匹配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 }“选项”。

答案 1 :(得分:1)

生成类时,还会生成一个名为jaxb.properties的文件。确保应用程序在运行时可以访问此文件。 我有同样的问题,这是由于maven打包:maven将不包括在src / main / java树下面的包资源文件(如jaxb.properties),除非特别指示这样做。我使用带有add-resource目标的org.codehaus.mojo:build-helper-maven-plugin做到了这一点。 希望这有帮助

答案 2 :(得分:0)

我面对这个类似的错误,原因是webservices生成的存根java类之间存在冲突。

如果上述答案不起作用,请尝试查找冲突。

一次添加一个存根并逐步添加。

希望有所帮助