当前位置:首页 > Java

java如何用soap

2026-03-24 16:40:55Java

使用 Java 调用 SOAP 服务

Java 提供了多种方式调用 SOAP Web 服务,以下是几种常见方法:

使用 JAX-WS 生成客户端代码

JDK 自带的 wsimport 工具可以根据 WSDL 文件生成客户端代码:

wsimport -keep http://example.com/service?wsdl

生成的代码包含服务接口和存根类,可以直接在 Java 代码中调用:

MyService service = new MyService();
MyServicePortType port = service.getMyServicePort();
String result = port.myOperation("param");

动态调用 SOAP 服务

如果不希望生成客户端代码,可以使用动态调用方式:

java如何用soap

URL wsdlURL = new URL("http://example.com/service?wsdl");
QName serviceName = new QName("http://example.com", "MyService");
Service service = Service.create(wsdlURL, serviceName);

QName portName = new QName("http://example.com", "MyServicePort");
MyServicePortType port = service.getPort(portName, MyServicePortType.class);

String result = port.myOperation("param");

使用 Apache CXF

Apache CXF 是一个流行的 Web 服务框架,可以简化 SOAP 调用:

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(MyServicePortType.class);
factory.setAddress("http://example.com/service");
MyServicePortType client = (MyServicePortType) factory.create();

String result = client.myOperation("param");

使用 Spring Web Services

在 Spring 项目中可以使用 Spring-WS 调用 SOAP 服务:

java如何用soap

WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setDefaultUri("http://example.com/service");

MyRequest request = new MyRequest();
request.setParam("param");

MyResponse response = (MyResponse) webServiceTemplate.marshalSendAndReceive(request);

手动构建 SOAP 消息

对于需要更精细控制的情况,可以手动构建 SOAP 消息:

SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection connection = soapConnectionFactory.createConnection();

MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();

SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody body = envelope.getBody();

SOAPElement operation = body.addChildElement("myOperation", "ns");
operation.addChildElement("param").addTextNode("value");

URL endpoint = new URL("http://example.com/service");
SOAPMessage response = connection.call(message, endpoint);

处理 SOAP 安全

如果服务需要 WS-Security 认证,可以使用 WSS4J:

Map<String, Object> props = new HashMap<>();
props.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
props.put(WSHandlerConstants.USER, "username");
props.put(WSHandlerConstants.PASSWORD, "password");
props.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);

WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(props);
client.getOutInterceptors().add(wssOut);

处理 SOAP 附件

对于包含附件的 SOAP 消息:

AttachmentPart attachment = message.createAttachmentPart();
attachment.setContent(new FileDataSource("file.txt"));
attachment.setContentType("text/plain");
message.addAttachmentPart(attachment);

以上方法涵盖了 Java 调用 SOAP 服务的主要场景,开发者可以根据项目需求选择合适的方式。

标签: 如何用java
分享给朋友:

相关文章

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据类…

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…

如何学习java语言

如何学习java语言

学习Java语言的系统方法 理解基础概念 Java是一种面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制流语句(if-else、循环)是第一步。熟悉类和对象的概念,理解封装、继承和多态三…

如何用java做游戏

如何用java做游戏

使用Java开发游戏的基本方法 Java是一种跨平台的编程语言,适合开发2D游戏甚至简单的3D游戏。以下是使用Java开发游戏的主要方法和工具。 选择游戏开发框架 Java游戏开发通常依赖以下框架或…

java面试官如何面试别人

java面试官如何面试别人

考察基础知识 从Java核心概念入手,包括面向对象特性(封装、继承、多态)、集合框架(ArrayList vs LinkedList、HashMap实现原理)、异常处理机制、多线程(线程池、锁机制)等…