我正在尝试将 JAX-WS Web 服务添加到我的 Embedded Jetty 应用程序。Web 服务客户端将是一个 .NET 应用程序。
我的项目是在 Netbeans 7.1.1 中作为 Maven 应用程序创建的。它使用 Spring 3.0。
我采取了以下步骤将 JAX-WS 添加到我的应用程序中:
在 pom.xml 中添加了 jaxws-spring。
<dependency> <groupId>org.jvnet.jax-ws-commons.spring</groupId> <artifactId>jaxws-spring</artifactId> <version>1.8</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> </exclusions> </dependency>
在我的 Spring Web 服务上下文中,配置 WSSpringServlet。
webservicesContext.addServlet(new ServletHolder(new WSSpringServlet()), "/service/*");
为我的服务创建了一个实现类。
@WebService(name = "GenerateUEIDService") public class GenerateUEIDService { @WebMethod(operationName = "generateUniqueIds") public String generateUniqueIds() { return "Hello World"; } }
在 Spring applicationContext.xml 文件中配置我的服务。
<bean id="generateUEIDService" class="com.mycompany.GenerateUEIDService"/> <wss:binding url="/service/GenerateUEID.svc"> <wss:service> <ws:service bean="#generateUEIDService" /> </wss:service> </wss:binding>
对于上面的第 3 步,我没有在 Netbeans 中使用任何 Web 服务创建向导。相反,我将 GenerateUEIDService 创建为普通的 Java 类,但添加了注释。即使我没有 Netbeans 确实以某种方式检测到这是一个 Web 服务,因为它在项目视图中创建了一个“Web 服务”节点,其下方有“GenerateUEIDServiceService”。如果我展开 GenerateUEIDServiceService,我会看到“generateUniqueIds: String”。
它似乎构建得很好。但是当我运行应用程序时,我得到:
com.sun.xml.ws.model.RuntimeModelerException:运行时建模器错误:未找到包装类 com.mycompany.jaxws.GenerateUniqueIds。你有没有运行 APT 来生成它们?
不,我没有运行 APT 来生成任何东西。鉴于我的配置,我应该怎么做?我需要在我的 pom.xml 中添加插件吗?还是 Netbeans 神奇地应该为我生成包装器?
请注意,我的 Web 服务客户端将是 .NET。所以我假设我应该使用文档/文字包装的默认 SOAPBinding。