用于Java的进程内SOAP服务服务器

好的,我正在开发一个程序,它将被部署到许多机器上(Windows,Linux,AIX,z / Linux,openVMS等)。 我希望该应用程序包含SOAP Web服务,但我不想捆绑tomcat或为服务运行单独的服务(我希望它们与应用程序的其余部分在同一进程中)。

基本上我正在寻找的是我可以定义一个类(比如WebServices )。 我也可以编写WSDL或任何其他类型的服务描述。 我想要这样的东西:

 SOAPServer server = makeMeASoapServer(); //do config on the server server.add(new WebService(...)); server.listen(port); 

显然名称和参数会有所不同。

我一直在看Axis,它似乎提供了这个,但我不知道我需要使用哪些类。 我是否因为想要这种行为而疯狂? 我不敢相信更多的人不会这样做,我一直在.NET客户端中使用嵌入式Web服务。

似乎jdk 6.0已经附带了jax-ws实现,还有一个可以嵌入的servlets器。 我没有弄清楚所有的碎片,但这是一个开始:

 mkdir -p helloservice/endpoint/ 

helloservice / endpoint / Hello.java:

 package helloservice.endpoint; import javax.jws.WebService; @WebService() public class Hello { private String message = new String("Hello, "); public void Hello() {} public String sayHello(String name) { return message + name + "."; } } 

HelloService的/端点/ Server.java:

 package helloservice.endpoint; import javax.xml.ws.Endpoint; public class Server { protected Server() throws Exception { System.out.println("Starting Server"); Object implementor = new Hello(); String address = "http://localhost:9000/SoapContext/SoapPort"; Endpoint.publish(address, implementor); } public static void main(String args[]) throws Exception { new Server(); System.out.println("Server ready..."); Thread.sleep(5 * 60 * 1000); System.out.println("Server exiting"); System.exit(0); } } 

构建东西:

 mkdir build javac -d build helloservice/endpoint/*java $JAVA_HOME/wsgen -d build -s build -classpath . helloservice.endpoint.Hello 

运行东西:

 java -cp build helloservice.endpoint.Server 

现在在http:// localhost:9000 / SoapContext / SoapPort上运行的东西。 您可以在http:// localhost:9000 / SoapContext / SoapPort?WSDL上获取wsdl

还没有找到一个客户端..

除了非常好的答案之外,我在Apache轴上找到了一个名为SimpleHTTPServer的类,我非常确定它会做同样的事情,但只需要Java 1.5用于那些坚持1.5的人

我不会去探索它,因为我将使用另一个解决方案,所以我实际上并没有validation它是否符合我的想法,但我确信它确实如此。

大多数(/ all?)Java SOAP服务器实现提供了一个Servlet(另一个答案中的javax.xml.ws.Endpoint方法确实看起来有点简单……)。 您可以考虑的一些SOAP实现是:Apache CXF:cxf.apache.org,Apache Axis2:ws.apache.org/axis2/或Spring Web Servies:static.springsource.org/spring-ws/site/。

最流行的嵌入式Java Web服务器似乎是Jetty ,您可以以编程方式(使用普通Java或Spring bean)或使用自定义XML格式对其进行配置。

要直接解决主要问题,另一种方法是使用Jetty的嵌入式服务器。 请参阅此链接了解详情。 来自上述页面的链接可以帮助您理解简单的Web服务器(即,提供静态页面的服务器;虽然我完全清楚“简单”是一个非常模糊的术语wrt web服务器)和帮助您部署Web的Web服务器服务。