可以。
如果您可以创建一个Java方法,该方法1)带有@WebMetod注释,2)需要参数并调用您的第三方代码,并将其封装为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“祝福”的jar文件的文件夹中 - 我相信对于Tomcat 6.[1],它是$ {TOMCAT} / lib。
在最终成为WAR文件的Eclipse项目中:
package foo;
import java.net.InetAddress;
import java.net.UnknownHostException;
@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>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<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-mapping>
<servlet-name>webservice</servlet-name>
<url-pattern>/ws</url-pattern>
</servlet-mapping>
创建一个新文件 WEB-INF/sun-jaxws.xml:
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint name='ping' implementation='foo.Ping'url-pattern='/ws'>
</endpoint
</endpoints>
确保将web.xml和sun-jaxws.xml都包含在部署中!
完成!
现在将你的war文件部署到上面准备好的Tomcat,并在你部署的web应用程序下打开“/ws”。这可能是 http://localhost:8080/foo/ws。 这将为您提供包括所有Web服务(包括Ping)WSDL的信息页面的链接。此链接可直接用于任何WSDL处理工具,包括Eclipse IDE for Java EE Developers和WSDCi中的Web服务工具。
希望这能帮到你 :)
[1]不将它们设置为全局变量会导致类加载器问题!