是的。
如果您可以创建一个 Java 方法,该方法 1) 使用 @WebMetod 注释,并且 2) 采用所需的参数并调用您的第 3 方代码,并将其包装为 Web 应用程序,您可以使用 Metro 堆栈 - https:/ /metro.dev.java.net/ - 使用任何 Servlet 2.5 Web 容器(将其放在 Web 容器全局 lib 文件夹中)以将上述方法公开为 Web 服务。我们使用的是嵌入式 Jetty,但我已经验证这适用于 Tomcat。
我在http://archive.midrange.com/java400-l/200904/msg00071.html中写下了我的发现
我从https://metro.dev.java.net/1.4/下载了 Metro 1.4 (1.5 版很新,我还没看过),最终解压成几个 jar 文件。
将 webservices-api.jar、webservices-rt.jar、webservices-extra-api.jar 和 webservices-extra.jar(四个文件)复制到包含所有 tomcat 通用的“祝福”jarfile 的文件夹 - 我相信它是 ${ Tomcat 6.[1] 的 TOMCAT}/lib
在您的 Eclipse 项目中最终成为一个 WAR 文件:
package foo;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
Ping is a simple web service class providing a "yes, we have contact" class.
Currently the doPing() method provides a response with the host name and
address (if available) and the current server time.
*/
@javax.jws.WebService
public class Ping {
@javax.jws.WebMethod(action = "doPing")
public String doPing() {
System.out.println("Ping.doPing() called.");
String hostName;
try {
hostName = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
hostName = "unknown (" + e.getMessage() + ")";
}
String hostAddress;
try {
hostAddress = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
hostAddress = "unknown (" + e.getMessage() + ")";
}
return "Reached '" + hostName + "' (" + hostAddress + ") at "
+ new java.util.Date() + " java.version="
+ System.getProperty("java.version", "(not set)");
}
}
- 在你的 WEB-INF/web.xml 添加这个片段:
<听众>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<小服务程序>
<description>JAX-WS 端点 - 此 servlet 必须处理所有端点</description>
<display-name>webservice</display-name>
<servlet-name>webservice</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 每个端点必须有一个到 JAX-WS 端点 servlet 的映射 -->
<servlet 映射>
<servlet-name>webservice</servlet-name>
<url-pattern>/ws</url-pattern>
</servlet-mapping>
- 创建一个新文件 WEB-INF/sun-jaxws.xml:
<端点 xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' 版本='2.0'>
<端点名称='ping' 实现='foo.Ping'url-pattern='/ws'>
</端点
</端点>
现在将您的war 文件部署到上面准备好的Tomcat 中,并在您部署的Web 应用程序下打开“/ws”。这可能是http://localhost:8080/foo/ws
;。这将为您提供一个包含所有 Web 服务(包括 Ping)的 WSDL 链接的信息页面。此链接可直接在任何 WSDL 处理工具中使用,包括 Eclipse IDE 中用于 Java EE Developers 和 WSDCi 的 Web 服务工具。
希望这可以帮助你:)
[1] 不让它们全局化会给你类加载器问题!