12

好的,我正在开发一个程序,它将部署到许多机器(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 服务来做这件事。

4

4 回答 4

24

似乎 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 + ".";
  }
}

你好服务/端点/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

还没来得及做客户..

于 2009-11-24T21:42:39.863 回答
1

除了 nos 的好答案,我在 Apache 轴中找到了一个名为的类SimpleHTTPServer,我很确定它会做同样的事情,但对于那些坚持使用 1.5 的人来说只需要 Java 1.5

我不打算探索它,因为我将使用其他解决方案,所以我还没有真正验证它是否符合我的想法,但我很确定它确实如此。

于 2009-11-24T22:09:51.880 回答
1

大多数(/全部?)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 格式对其进行配置。

于 2009-11-24T22:29:26.187 回答
0

为了直接解决主要问题,另一种方法是使用 Jetty 的嵌入式服务器。有关详细信息,请参阅此链接。来自上述页面的链接可以帮助您了解简单的 Web 服务器(即,提供静态页面的服务器;尽管我完全意识到“简单”是一个非常模糊的术语 wrt Web 服务器)和帮助您部署 Web 的 Web 服务器服务。

于 2013-07-23T18:11:26.653 回答