Java 11:导入javax.xml.ws.WebFault:“无法解析符号ws”

时间:2019-08-02 00:19:58

标签: java jaxb wsdl java-11 wsdl2java

我正在尝试将服务升级到Java11。

我们当前使用wsdl2java(Apache CXF)生成基于WSDL的源代码。我正在通过Maven进行所有操作。源文件基于wsdl正确生成。

不幸的是,生成的某些源文件包括以下导入:

import javax.xml.ws.WebFault; 
import javax.jws.WebService;

我缺少javax.xml.ws和javax.jws软件包。

在研究中,我发现Jaxb在主要JDK中已弃用,因此我需要在pom中添加新的依赖项。我尝试了各种组合,但是它们都可以归结为:

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.3.0.1</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.2</version>
    </dependency>

不幸的是,无论我做什么,我的IDE似乎都找不到javax.xml.ws和javax.jws。

有人知道我可能需要包括哪些依赖关系才能获得这些软件包吗?

尽管这不是问题的核心,但这是我的wsdl2java内容:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.3.2</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated-sources/cxf/</sourceRoot>

                <wsdlRoot>src/main/webapp/resources/wsdl/fedex</wsdlRoot>
                <includes>
                    <include>**/*.wsdl</include>
                </includes>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

(是的,我正在生成联邦快递客户端)。

2 个答案:

答案 0 :(得分:4)

由于经常发生,我在发布此问题后立即找到了答案。我添加了一个额外的依赖项,并且似乎已经解决了它。添加的依赖项是:

    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-ri</artifactId>
        <version>2.3.0</version>
        <type>pom</type>
    </dependency>

我所有的Jaxb依赖项都看起来像...

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
</dependency>

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.2</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-ri</artifactId>
    <version>2.3.0</version>
    <type>pom</type>
</dependency>

答案 1 :(得分:0)

在我的情况下,唯一需要添加的依赖项是:

compile "com.sun.xml.ws:jaxws-ri:2.3.3"

由于某种原因,版本2.3.0引用了一些未知的依赖项。