java - 有轻量级的独立 SOAP 服务器吗?或者你将如何实现?

标签 java soap

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

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

然后我看了一下轴库(很棒)。它甚至带有一个 SimpleAxisServer 模块,它完全符合我的要求。它作为一个非常轻量级的独立 SOAP 服务器运行,部署 SOAP 服务非常容易。但是……问题来了: SimpleAxisServer 仅用于开发和调试目的,否则强烈建议不要使用它。当然,我无视这些提示开始使用该模块制作系统原型(prototype),几天后就遇到了麻烦......

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

最佳答案

我个人会使用 Apache CXF。 standalone 模式基于 Jetty,根据我的书,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);
    }
}

如果您正在使用 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>

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

首先创建界面。

import javax.jws.WebService;

@WebService
public interface MyService {
    public String hello();
}

然后是实现类。

import javax.jws.WebService;

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

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

关于java - 有轻量级的独立 SOAP 服务器吗?或者你将如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1781407/

相关文章:

java - java多个setText之间的延迟

Java 字符串到泛型类型

java - JSF Phase Listener 重定向表单不是 iframe

java - 什么是最高效的 Java Collections 库?

java - 我应该在交易系统中使用哪种数据结构?

ruby - Savon 2.1.0 基本身份验证无法正常工作

swift - 在 Swift 中为 SOAP POST 从 NSURLConnection 迁移到 NSURLSession

c# - 在 ASP.NET 上通过 SOAP 调用 Web 服务的最简单方法

ios - 快速网络服务通信

java - 无法通过 Olap4J API 连接到 OLAP Cube