把xml转化为soapmessage_soap消息传递和处理

本文展示了如何在Java中将XML转换为SOAPMessage,通过创建消息工厂、服务、Dispatch对象来处理SOAP消息。代码示例中包含了添加SOAP Body元素,调用服务并获取响应的过程。
摘要由CSDN通过智能技术生成

import java.io.IOException;

import java.net.URL;

import javax.xml.namespace.QName;

import javax.xml.soap.MessageFactory;

import javax.xml.soap.SOAPBody;

import javax.xml.soap.SOAPBodyElement;

import javax.xml.soap.SOAPEnvelope;

import javax.xml.soap.SOAPException;

import javax.xml.soap.SOAPMessage;

import javax.xml.soap.SOAPPart;

import javax.xml.ws.Dispatch;

import javax.xml.ws.Service;

import org.junit.Test;

import org.w3c.dom.Document;

public class TestSoap {

private String ns="http://service.soap.org/";

private String wsdlUrl="http://localhost:6666/ns?wsdl";

@Test

public void test01(){

try {

//1

创建消息工厂

MessageFactory

factory=MessageFactory.newInstance();

//2 根据消息工厂创建soapmessage

SOAPMessage

message=factory.createMessage();

//3

创建SOAPPart

SOAPPart

part=message.getSOAPPart();

//4

获取SOAPEnvelope

SOAPEnvelope

envelope=part.getEnvelope();

//5 可以通过SOAPEnvelope有效的获取相应的body和header等消息

SOAPBody

body=envelope.getBody();

//6

根据qname创建相应的节点

QName

qname=new QName("http://java.zttc.edu.cn/webservice");

///body.addBodyElement(qname).setValue("1234234");

SOAPBodyElement ele= body.addBodyElement(qname);

ele.addChildElement("a").setValue("22");

ele.addChildElement("b").setValue("33");

//打印消息信息

message.writeTo(System.out);

} catch (SOAPException e)

{

// TODO

Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void test02(){

try {

//1

创建服务

URL url=new

URL(wsdlUrl);

QName

sname=new QName(ns, "MyServiceImplService");

Service

service=Service.create(url,sname);

//2

创建dispatch

Dispatch

dispatch=service.createDispatch(new

QName(ns,"MyServiceImplPort"),

SOAPMessage.class,

Service.Mode.MESSAGE);

//3

创建SOAPMessage

SOAPMessage

msg=MessageFactory.newInstance().createMessage();

SOAPEnvelope

envelope=msg.getSOAPPart().getEnvelope();

SOAPBody

body=envelope.getBody();

//4

创建qname并指定消息中的传递数据

QName

ename=new QName(ns,"add","nn");

SOAPBodyElement

ele=body.addBodyElement(ename);

ele.addChildElement("a").setValue("22");

ele.addChildElement("b").setValue("33");

msg.writeTo(System.out);

System.out.println("\n

invoking..");

//5

通过dispatch传递消息

SOAPMessage

response=dispatch.invoke(msg);

response.writeTo(System.out);

System.out.println();

//将响应的消息转为dom对象

Document

doc=response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();

String

str=doc.getElementsByTagName_r("addResult").item(0).getTextContent();

System.out.println(str);

} catch (Exception e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

}

}

测试test02,结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值