Grizzly – java.lang.NoSuchMethodError:javax.xml.ws.WebFault.messageName

我有一个Web服务的wsdl文件。 我想测试客户端和服务器之间的交互。 为此,我运行带有嵌入式灰熊的模拟服务器。

关于实现模拟服务器的问题。 我使用wsimport和write实现从wsdl(和xsd)生成了一个接口。 当在灰熊上运行时,我收到以下错误:

com.sun.xml.ws.server.ServerRtException: [failed to localize] cannot.load.wsdl(META-INF/wsdl/test.wsdl) 

我使用以下代码运行Web服务:

  HttpHandler httpHandler = new JaxwsHandler(new TestImpl()); server.getServerConfiguration().addHttpHandler(httpHandler, "/test"); 

问题是Grizzly无法找到wsdl和xsd文件。 在嵌入式玻璃鱼中它的工作。

EDIT1

我将wsdlLocation更改为“test.wsdl”及其工作。 但现在灰熊说:

 java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String; 

EDIT2

如果使用JDK1.7就可以了。 但我需要JDK 1.6

我不确定你为什么会看到这个错误。 我可以运行Grizzly jaxws示例并使用1.6或1.7获取wsdl。

我建议您查看示例的源代码1并与您拥有的内容进行比较。

我将jdk6更改为jdk7并且工作正常! 不要忘记在这里更改JAVA_HOME和Netbeans的默认JDK: 如何设置运行JDK Netbeans?

您的Grizzly版本需要JAX-WS 2.2 API,而JDK 1.6则需要JAX-WS 2.1。 正如其他人提到的,其中一些文件需要安装到一个支持目录中。 您可以在此处下载所需文件,也可以从Grizzly安装中获取。 下载包括一个Ant构建文件,该文件提供了一个构建目标,用于将文件安装到JDK认可的目录中。 您可以使用ant install-api运行它。 如果您无法运行Ant,则可以手动安装它们:

 cp lib/jaxb-api.jar $JAVA_HOME/lib/endorsed cp lib/jaxws-api.jar $JAVA_HOME/lib/endorsed 

不要将JAX-WS发行版中的其他文件安装到endorsed目录中,除非您想为自己创建一些非常难以调试的bug。

我建议在$ JAVA_HOME / lib / endorsed中使用endorsed目录,因为这将适用于大多数工具和应用程序而无需任何其他更改。 其他人已经提出了更有针对性的更改,例如在Maven构建期间设置已签名的目录或将文件复制到Tomcat签名的目录中。 所有这些方法都很好,只要您可以确保您的代码正在获取正确的认可目录。

结果,我们不得不使用背书机制。 文档

创建一个名为endorsed的文件夹并将这些jar文件放入其中1.jaxb-api-2.2.jar 2.jaxws-api.jar将该文件夹放在tomcat服务器中作为C:\ tomcat-7.50 \ 并运行它将作品

将JDK从1.6改为1.7对我有用。

Interesting Posts