Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java com.sun.xml.internal.ws.client不存在_Java - Fatal编程技术网

Java com.sun.xml.internal.ws.client不存在

Java com.sun.xml.internal.ws.client不存在,java,Java,我试图捕获ClientTransportException,我的程序在编译阶段失败,出现以下异常 [ERROR]\workspace\rates\java\service\bundle1\src\main\java\com\connector\ws\TestClass1.java:[72,70] package com.sun.xml.internal.ws.client does not exist 据我所知,这个包来自rt.jar,存在于jre中 如果我添加@SuppressWarning

我试图捕获ClientTransportException,我的程序在编译阶段失败,出现以下异常

[ERROR]\workspace\rates\java\service\bundle1\src\main\java\com\connector\ws\TestClass1.java:[72,70] package com.sun.xml.internal.ws.client does not exist
据我所知,这个包来自rt.jar,存在于jre中

如果我添加@SuppressWarnings(“限制”),它将从EclipseMaven插件编译,但不会从IntelliJ Idea(通过Maven)或命令行编译

当我删除@SuppressWarnings时,Eclipse会显示以下警告

Access restriction: The type ClientTransportException is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar
我发现了类似的结果,但答案对我来说不够清楚,因为我可以在rt.jar中看到这个类,我的IntelliJ想法也可以看到它


有人能解释这种行为和可能的解决方法吗?

您可以使用以下方法消除此错误:

javac -XDignore.symbol.file=true
这是传递给javac使用rt.jar而不是ct.sym的参数(默认情况下使用,编译到目标旧版本时需要)

ct.sym
不包含rt.jar中的所有类。由于不应使用
sun.*
类,因此它们的类存根可能不在
ct.sym中,从而导致编译失败

删除对
sun.*
的调用应该会删除此问题。(使用sun软件包是一种不好的做法)

参考资料:

事实上,JDK中有一个叫做“ct.sym”的东西。当javac编译代码时,它不会链接到rt.jar。相反,它使用带有类存根的特殊符号文件lib/ct.sym。内部JDK类不放在该符号文件中,因为它们是内部类。你根本不应该想使用它们

这不是编译器问题。根据ct.sym中提供的信息,javac运行正常。 这个问题属于那些决定ct.sym应该提供什么(以及应该隐藏什么)的人 我还不能确定这个错误的正确类别。 这是故意的。也许包名“com.sun.xml.internal…”可以看作是一个提示。 用户不应该编写依赖于内部JDK实现类的代码。这些类是JDK的内部实现细节,如有更改,恕不另行通知

对于JDK N和--release M,M
注意


在这种情况下,最好不要使用
ClientTransportException
类,而是用
javax.xml.ws.WebServiceException
代替它,正如artbristol

所建议的那样,根据这一点,直接调用“sun”包是一种不好的做法。当我遇到同样的问题时,它是通过捕获
javax.xml.ws.webserviceeexception
来解决的(正如artbristol所建议的)。

即使在2015年,我也发现许多项目使用这种导入
com.sun.
包的糟糕做法

如果您(像我一样)无法更改导入这些包的类,那么将
rt.jar
添加到类路径中就可以了


请注意,所述
rt.jar
通常位于
/jre/lib
文件夹下。

jre系统库限制某些包对编译器的访问,而JDK可以访问这些包。在这种情况下,代码中不会有错误,但编译时会显示错误,如找不到类或找不到包

在这种情况下,有两种做法。 1)jre系统库的rt.jar添加到编译和构建路径中。 2) 在构建路径中添加jaxws-rt.jar


第二个选项是一个很好的选项,因为它可以避免在构建路径中添加重复的库。

即使我在maven项目中也遇到了同样的问题。我已经进口了
import com.sun.xml.internal.ws.client.ResponseContext在一个类文件中,但该类文件未被使用。

我刚刚在类文件中注释了该行,错误停止了,我可以成功运行我的maven项目。

您不应该使用
com.sun.*
包。 我们可以使用自己的类来解决这个问题:

/**
 * Copy of com.sun.xml.internal.ws.client.BindingProviderProperties since we're
 * not allowed to use com.sun.* packages..     
 */
public final class BindingProviderProperties {
    public static final java.lang.String CONNECT_TIMEOUT = "com.sun.xml.internal.ws.connect.timeout";
    public static final java.lang.String REQUEST_TIMEOUT = "com.sun.xml.internal.ws.request.timeout";
}

在pom.xml中导入此依赖项

   <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.1.4</version>
   </dependency>

com.sun.xml.ws
jaxws-rt
2.1.4

解决方案非常简单:当您复制现成的代码或先编写代码,然后加载依赖项时,存在依赖项冲突
com.sun.xml.*
包已经是JDK8的一部分,但是Maven在编译时没有看到它。因此,请确保使用来自mvn:repo:/…rt.jar而不是jdk*/…/rt.jar的包。

对于maven build,添加以下插件将解决此问题

基本上是添加编译器参数来引用tools.jar的正确路径

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <compilerArguments>
                <bootclasspath>${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar${path.separator}${java.home}/../lib/tools.jar</bootclasspath>
            </compilerArguments>
        </configuration>
    </plugin>

org.apache.maven.plugins
maven编译器插件
3.8.1
1.8
1.8
${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar${path.separator}${java.home}/./lib/tools.jar

看,也许会有帮助。谢谢,我现在正在阅读,但我在项目中只看到了ClientTransportException的一个实现。谢谢,@Jesper,我已经在中阅读了这篇文章,但它告诉我不应该使用它,但我仍然可以。不幸的是,我需要捕获此异常,它是由我们的ProjectLegacy引起的。您不能捕获
javax.xml.ws.WebServiceException
吗?链接已断开…:-/@托马斯:是的,不幸的是,我记得这篇文章很长,所以我没有在文章中引用