好的,我正在开发一个将部署到许多机器(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 实现,以及一个可以嵌入的小服务器。 我还没有弄清楚所有的部分,但这是一个开始:
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/endpoint/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
还没有开始做客户..
关于java - 用于 Java 的进程内 SOAP 服务服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1792737/