是否有轻量级的独立SOAP服务器?或者你将如何实现一个?

4 java soap

这里的挑战是我需要在Java中实现基于SOAP通信的高度并发且动态的系统.它可以被视为一个多代理系统,其中代理是响应SOAP请求的软件进程(如守护进程).在运行时,我的系统可能包含超过一千个这样的代理 - 每个代理绑定到它自己的专用端口,提供完全相同的服务/接口.因此,将其实现为Tomcat servlet或类似方法是一种沉重的方式.

在我第一次尝试时,我构建了一个简单的HTTP-Server,并尝试在顶部实现SOAP消息处理.但我不想重新发明轮子,特别是因为简单对象访问协议实际上并不那么简单.不幸的是,大多数Java解决方案都基于Jax-WS,需要运行tomcat或其他服务器环境(据我所知).

然后我看了一下轴库(太棒了).它甚至还带有一个SimpleAxisServer模块,它完全符合我的要求.它作为一个非常轻量级的独立SOAP服务器运行,并且非常容易地部署SOAP服务.但是......问题就在于:SimpleAxisServer仅用于开发和调试目的,否则非常不鼓励使用它.当然,我忽略了这些提示,开始使用该模块对系统进行原型设计,并在几天后遇到麻烦......

我现在的实际问题是:这个问题没有现成的解决方案吗?我应该查看哪些库/类?

ant*_*tix 7

我个人会使用Apache CXF.独立模式基于Jetty,根据我的书很轻,Jetty本身稳定且性能良好.

import java.util.logging.LogManager;
import javax.xml.ws.Endpoint;

public class MySoapServer {
    public static void main(String[] args) {
        String serviceAddress = "http://localhost:9099/mysoap";  
        MyService implementor = new MyServiceImpl();
        Endpoint ep = Endpoint.publish(serviceAddress, implementor);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您正在使用Maven(您确实应该使用),请将以下内容添加到pom.xml:

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-frontend-jaxws</artifactId>
  <version>2.4.2</version>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-transports-http</artifactId>
  <version>2.4.2</version>
</dependency>    
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-transports-http-jetty</artifactId>
  <version>2.4.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

服务本身将使用标准的JAX-WS注释构建.

首先创建界面.

import javax.jws.WebService;

@WebService
public interface MyService {
    public String hello();
}
Run Code Online (Sandbox Code Playgroud)

然后是实施班.

import javax.jws.WebService;

@WebService(serviceName="HelloWorld")    
public class MyServiceImpl implements MyService {
        public String hello() {
            return "Hello World!";
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意,也可以使用WSDL优先方法.