67,516
社区成员
发帖
与我相关
我的任务
分享
package soaptest.client;
import java.io.FileReader;
import java.util.*;
import javax.xml.soap.*;
import org.jdom.*;
import org.jdom.input.*;
import javax.xml.messaging.*;
public class XmlToSoap {
public static void createSoapMessage(){
try{
//创建连接
SOAPConnectionFactory myfactory = SOAPConnectionFactory.newInstance();
SOAPConnection con = myfactory.createConnection();
//创建消息
MessageFactory msgfactory = MessageFactory.newInstance();
SOAPMessage message = msgfactory.createMessage();
//得到消息对象结构
SOAPPart mypart = message.getSOAPPart();
//得到信封
SOAPEnvelope myenvelope = mypart.getEnvelope();
SOAPBody mybody = myenvelope.getBody();
FileReader fr = new FileReader("trans.xml");
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(fr);
Element root = document.getRootElement();
System.out.println(root.getTextTrim());
//创建调用函数根节点
Name bodyName = myenvelope.createName("onLineUnderWrite", "m", "www.bocsoft.com.cn");
SOAPBodyElement bodyelement = mybody.addBodyElement(bodyName);
//调用XML处理,
createXmlToSoapbody(bodyelement,root,myenvelope);
//保存消息
message.saveChanges();
System.out.println("###################发送数据包#########################");
message.writeTo(System.out);
System.out.println("\n\n");
URLEndpoint endPt = new URLEndpoint("http://localhost:8080/Myweb/StudentInfoServlet");
SOAPMessage reply = con.call(message, endPt);
System.out.println("###################接收数据包#########################");
reply.writeTo(System.out);
System.out.println("\n\n");
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 将orgelement格式的XML文件转换成soapelement消息列
* @param soapelement
* @param orgelement
*/
public static void createXmlToSoapbody(SOAPElement soapelement ,Element element,SOAPEnvelope myenvelope){
try{
//第一步:无论如何,当前这个传入的节点应该加到soapelement中去
Name curname = myenvelope.createName(element.getName());
SOAPElement curesoaplement = soapelement.addChildElement(curname);
//System.out.println("当前节点的名称:"+element.getName()+",值:"+element.getValue());
//第二步:增加完了需要对当前的节点进行判断,如果有子节点,则递归调用此函数,如果没有子结点则将当前节点的值取出来放入SOAPelement对象中
List list = element.getChildren();
//System.out.println(list.size());
if(list.size()>0){
//System.out.println("非叶子结点,需要进行递归");
//对list里面的element元素进行循环处理
for(int i=0;i<list.size();i++){
Element curelement = (Element)list.get(i);
//递归循环处理
createXmlToSoapbody(curesoaplement,curelement,myenvelope);
}
}else{
//System.out.println("叶子结点,直接赋值"+element.getValue());
curesoaplement.addTextNode(element.getValue());
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
createSoapMessage();
}
}