gpt4 book ai didi

java - 为什么我的 Java 6 JDK 中的这个类看起来像 Java 5 版本?

转载 作者:行者123 更新时间:2023-12-02 05:25:17 29 4
gpt4 key购买 nike

我正在使用 Java 6 运行 IntelliJ 来构建我的项目。我正在通过 SVN 进行干净的 checkout ,并尝试执行 mvn clean install 它运行成功,但当我尝试部署应用程序时,出现编译时错误。它说我正在尝试使用不存在的构造函数。

具体来说,我正在尝试使用 Here 中的构造函数。 Java 5 版本中没有此构造函数。但由于某种原因,我的 jdk 1.6 安装中的 .class 文件似乎是 Java 5 版本。 .class 文件的位置是 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar!/javax/xml/ws/Service.class 并且当我向下钻取时,路径是直接从 IntelliJ 复制的。

这是 IntelliJ 的反编译代码

  // IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available

package javax.xml.ws;

public class Service {
private javax.xml.ws.spi.ServiceDelegate delegate;

protected Service(java.net.URL url, javax.xml.namespace.QName qName) { /* compiled code */ }

public <T> T getPort(javax.xml.namespace.QName qName, java.lang.Class<T> aClass) { /* compiled code */ }

public <T> T getPort(javax.xml.namespace.QName qName, java.lang.Class<T> aClass, javax.xml.ws.WebServiceFeature... webServiceFeatures) { /* compiled code */ }

public <T> T getPort(java.lang.Class<T> aClass) { /* compiled code */ }

public <T> T getPort(java.lang.Class<T> aClass, javax.xml.ws.WebServiceFeature... webServiceFeatures) { /* compiled code */ }

public <T> T getPort(javax.xml.ws.EndpointReference endpointReference, java.lang.Class<T> aClass, javax.xml.ws.WebServiceFeature... webServiceFeatures) { /* compiled code */ }

public void addPort(javax.xml.namespace.QName qName, java.lang.String s, java.lang.String s1) { /* compiled code */ }

public <T> javax.xml.ws.Dispatch<T> createDispatch(javax.xml.namespace.QName qName, java.lang.Class<T> aClass, javax.xml.ws.Service.Mode mode) { /* compiled code */ }

public <T> javax.xml.ws.Dispatch<T> createDispatch(javax.xml.namespace.QName qName, java.lang.Class<T> aClass, javax.xml.ws.Service.Mode mode, javax.xml.ws.WebServiceFeature... webServiceFeatures) { /* compiled code */ }

public <T> javax.xml.ws.Dispatch<T> createDispatch(javax.xml.ws.EndpointReference endpointReference, java.lang.Class<T> aClass, javax.xml.ws.Service.Mode mode, javax.xml.ws.WebServiceFeature... webServiceFeatures) { /* compiled code */ }

public javax.xml.ws.Dispatch<java.lang.Object> createDispatch(javax.xml.namespace.QName qName, javax.xml.bind.JAXBContext jaxbContext, javax.xml.ws.Service.Mode mode) { /* compiled code */ }

public javax.xml.ws.Dispatch<java.lang.Object> createDispatch(javax.xml.namespace.QName qName, javax.xml.bind.JAXBContext jaxbContext, javax.xml.ws.Service.Mode mode, javax.xml.ws.WebServiceFeature... webServiceFeatures) { /* compiled code */ }

public javax.xml.ws.Dispatch<java.lang.Object> createDispatch(javax.xml.ws.EndpointReference endpointReference, javax.xml.bind.JAXBContext jaxbContext, javax.xml.ws.Service.Mode mode, javax.xml.ws.WebServiceFeature... webServiceFeatures) { /* compiled code */ }

public javax.xml.namespace.QName getServiceName() { /* compiled code */ }

public java.util.Iterator<javax.xml.namespace.QName> getPorts() { /* compiled code */ }

public java.net.URL getWSDLDocumentLocation() { /* compiled code */ }

public javax.xml.ws.handler.HandlerResolver getHandlerResolver() { /* compiled code */ }

public void setHandlerResolver(javax.xml.ws.handler.HandlerResolver handlerResolver) { /* compiled code */ }

public java.util.concurrent.Executor getExecutor() { /* compiled code */ }

public void setExecutor(java.util.concurrent.Executor executor) { /* compiled code */ }

public static javax.xml.ws.Service create(java.net.URL url, javax.xml.namespace.QName qName) { /* compiled code */ }

public static javax.xml.ws.Service create(javax.xml.namespace.QName qName) { /* compiled code */ }

public static enum Mode {
MESSAGE, PAYLOAD;

public static javax.xml.ws.Service.Mode[] values() { /* compiled code */ }

public static javax.xml.ws.Service.Mode valueOf(java.lang.String s) { /* compiled code */ }

private Mode() { /* compiled code */ }
}
}

谁能解释一下这是怎么回事?

编辑#1:部署时不会出错,编译时会出错。我在上面沟通得很差。您可以在 IntelliJ 中看到红色曲线。当我尝试深入了解构造函数时,它向我显示了上面看到的反编译代码。问题是它看起来不像 Java 6 类,它似乎是 Java 5 类,但它在我的 Java 6 SDK 中。另外,有人指出构造函数是 protected ,所以我不能使用它。但是,我的类扩展了服务,因此允许使用构造函数。

来自mvn -v的输出

<machine_name>:record-replay carlos$ mvn -v
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 08:51:28-0500)
Maven home: /Users/carlos/workspace/dev/apache-maven/current
Java version: 1.6.0_65, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.9.4", arch: "x86_64", family: "mac"

编辑 #2: @Didier 是的,我可以通过使用 Service.class 的 Jaxb 和 jaxws 版本来解决这个问题,谢谢。但我更感兴趣的是,为什么当 API 说它应该具有构造函数时,我的 Java 6 SDK 中的此类会失败

最佳答案

JDK6 中包含的实际 javax.xml.ws.Service 是来自 JAXB/JAX-WS 2.0 的服务,并且没有此构造函数。实际文档是here .

您引用的是 Java EE 6 的文档,其中包括带有新构造函数的 JAXB/JAX-WS 2.1。

您应该能够按照these instructions解决您的问题。另请参阅this question .

关于java - 为什么我的 Java 6 JDK 中的这个类看起来像 Java 5 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26100947/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com