Java 11: 导入javax.xml.ws.WebFault时出现"Cannot resolve symbol ws"错误

9
我正在尝试将一个服务升级到Java 11。
我们目前使用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>

是的,我正在生成一个FedEx客户端。

2个回答

14

常常情况下,我在发布这个问题之后立刻找到了答案。我添加了一个额外的依赖项,问题好像就解决了。添加的依赖项是:

如此经常发生,我发现了这个问题的答案, 在发布这个问题之后。我添加了一个额外的依赖项,看起来已经解决了这个问题。添加的依赖项是:

    <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
在我的情况下,唯一需要添加的依赖项是:
compile "com.sun.xml.ws:jaxws-ri:2.3.3"

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接