当我将 (Win64) 服务器从 8.5.3FP2 升级到 FP3 时,我的Domino Web 服务提供程序坏了。我在XPage 论坛上写了一些关于它的信息。
我不想使用基于 Axis 的遗留东西,而是使用 Java 1.6 附带的 JAX WS。我决定尝试这个非常简单的例子。我将代码复制粘贴到我的 Designer Eclipse 上的 Java 项目中,运行它,Web 服务在我的本地机器上启动并运行:它响应并返回 WSDL。
接下来,我将代码作为代码/Java 元素复制粘贴到服务器上的 NSF 并更改:
public static void main(String[] args)
至
public HelloWorldPublisher()
并在 XPage 中从 SSJS 调用此构造函数。我收到了这个错误:
线程“主”com.sun.xml.internal.ws.model.RuntimeModelerException 中的异常:必须在没有包的类上指定 @WebService.targetNamespace。类:HelloWorldImpl
这些类在包中。我也在 Domino 服务器 JVM 上使用命令行运行它并得到了同样的错误。谷歌搜索后我添加了这个
@WebService(targetNamespace="http://mycompany.net/dev/ph")
到HelloWorld和
@WebService(endpointInterface="com.mkyong.ws.HelloWorld", targetNamespace="http://mycompany.net/dev/ph", portName="HelloWorldPort", name="HelloWorld", serviceName="HelloWorldService")
到NSF中的HelloWorldImpl并运行它。之后,Web 服务似乎已启动并正在运行!
接下来我启动了服务器,因为它很慢,之后我没有看到 WSDL!我已经多次运行代码,重新启动 HTTP 并尝试删除@WebService
属性。我还尝试再次在服务器上使用命令行运行代码,但这总是给我上面的@WebService.targetNamespace错误,我不知道为什么。
现在我总是得到这个到 Domino 控制台:
java.lang.NoClassDefFoundError: com.sun.xml.internal.ws.api.streaming.XMLStreamWriterFactory(初始化失败) 在 java.lang.J9VMInternals.initialize(J9VMInternals.java:140) 在 com.sun.xml.internal.ws.server.SDDocumentImpl.writeTo(SDDocumentImpl.java:266) 在 com.sun.xml.internal.ws.transport .http.HttpAdapter.publishWSDL(HttpAdapter.java:538) 在 com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:230) 在 com.sun.xml.internal.ws.transport .http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:107) 在 com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:92) 在 com.sun.net.httpserver .Filter$Chain.doFilter(Filter.java:77) at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:77) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80 ) 在 sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:569) 在 com.sun.net.httpserver。Filter$Chain.doFilter(Filter.java:77) at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:541) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919) 在 java.lang.Thread.run(Thread.java:738)
在服务器上访问此 URL 时:
http://localhost:9999/ws/hello?wsdl
我对 Domino 日志中的任何内容感到有些惊讶,因为我认为这使用了 JVM http 服务器。我不明白为什么它首先起作用,现在它找不到这个类。
如何将 JAX WS 端点发布到 Domino 服务器?
编辑
我从这里下载了 JAX WS jars:
并将它们放在\jvm\lib\ext文件夹中。WSDL URL 又开始工作了!端点 URL 现在也有一些信息。我不知道为什么我必须这样做,因为该功能应该包含在 JVM 1.6 中。接下来我将尝试在端点代码中使用 Domino 对象。
是否可以让 JAX WS 使用 Domino http 服务器?
谢谢,
- 帕努