我如何调试:javax.xml.bind.JAXBException: - 更改wsdl / xsd后不是类上的有效属性

时间:2018-02-22 09:35:27

标签: soap jaxb wsdl2java

简介

嗨,我有一个完美的项目。

我正在使用apache cxf,生成的客户端代码运行正常。

然而,从昨天开始我下载了WSDL和XSD的新版本,但似乎失败了。

配置

我的插件pom.xml条目如下:

<plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>2.7.3</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sourceRoot>${basedir}/src/main/java</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>
                                        ${basedir}/src/interface.wsdl
                                    </wsdl>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

堆栈跟踪

我得到的错误如下:

javax.xml.bind.JAXBException: trans is not a valid property on class org.test.GetCons
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getElementPropertyAccessor(JAXBContextImpl.java:934) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.db.glassfish.JAXBRIContextWrapper.getElementPropertyAccessor(JAXBRIContextWrapper.java:106) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.client.sei.BodyBuilder$DocLit.<init>(BodyBuilder.java:227) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.client.sei.StubHandler.<init>(StubHandler.java:117) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.db.DatabindingImpl.initStubHandlers(DatabindingImpl.java:145) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.db.DatabindingImpl.<init>(DatabindingImpl.java:90) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:59) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:43) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.db.DatabindingFactoryImpl.createRuntime(DatabindingFactoryImpl.java:105) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.client.WSServiceDelegate.buildRuntimeModel(WSServiceDelegate.java:875) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.client.WSServiceDelegate.createSEIPortInfo(WSServiceDelegate.java:892) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.client.WSServiceDelegate.addSEI(WSServiceDelegate.java:855) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:435) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:404) ~[na:1.8.0_60]
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:386) ~[na:1.8.0_60]
    at javax.xml.ws.Service.getPort(Service.java:119) ~[na:1.8.0_60]

问题

  1. 如何调试?
  2. 是否是因为新wsdl和xml文件存在一些不一致?
  3. 以前代码运行正常。
  4. 我无法上传wsdl和xsd文件,因为它们是保密的。

    更新

    我注意到一个变化如下:

    工作定义创建了一个java注释,如:

    *         &lt;element name="trans" type="{http://server/}trans" minOccurs="0"/>
    

    现在破碎的人做了以下事情:

    *         &lt;element name="trans" type="{http://server/}trans" minOccurs="0" form="qualified"/>
    

1 个答案:

答案 0 :(得分:1)

检查你的GetCons类,特别是它的'trans'字段。

是否可以使用@XmlTransient进行注释?或者类似性质的问题,要解组的xml与生成的类不匹配(我猜xml包含<trans>...</trans>元素)

您的案例与this one类似。

根据问题更新进行更新:

我认为你的字段trans的xml没有命名空间或正确的命名空间。

“qualified”表示目标命名空间中的属性必须使用命名空间前缀

进行限定