好的,我正在开发一个程序,它将部署到许多机器(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服务。
答案 0 :(得分:23)
似乎jdk 6.0已经附带了jax-ws实现,还有一个可以嵌入的小服务器。 我没有想出所有的部分,但这是一个开始:
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还没有找到一个客户......
答案 1 :(得分:1)
除了很好的答案之外,我在Apache轴上发现了一个名为SimpleHTTPServer
的类,我很确定它做同样的事情但只需要Java 1.5用于那些坚持1.5的人
我不打算探索它,因为我将使用其他解决方案,所以我实际上没有验证它做了我认为它做的,但我很确定它确实如此。
答案 2 :(得分:1)
大多数(/ 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,您可以configure以编程方式(使用普通Java或Spring bean)或使用自定义XML格式。
答案 3 :(得分:0)
直接解决主要问题,另一种方法是使用Jetty的嵌入式服务器。有关详细信息,请参阅this link。来自上述页面的链接可以帮助您理解简单的Web服务器(即,提供静态页面的服务器;虽然我完全清楚“简单”是一个非常模糊的术语wrt web服务器)和帮助您部署Web的Web服务器服务。