soap协议 java_Java实现SOAP协议 之 HelloWorld

准备:

1. 准备一个web server。Tomcat 下载地址 http://tomcat.apache.org/

本例使用版本 apache-tomcat-7.0.54-windows-x64.zip

2. 写一个servlet send用来发送一个SOAP的message并添加一个附件。

3. 写一个servlet receive用来做SOAP message的解析并返回一个response。

4. 写一个简单的html页面触发 servlet A。

开发工具:

eclipse 版本 eclipse-jee-juno-SR2-win32-x86_64

下载地址:

http://www.eclipse.org/downloads/

下载J2EE版本的eclipse里面包含了SOAP常用的一些jar,但这个版本的没有jaxm-api.jar,这个需要额外下载

然后倒入。

代码结构:

e4e3b5e91394b1ec67e66eb5e8e8f643.png

web.xml代码如下:

Xml代码  fe9996168614f52c10a9978c08d8085a.png

web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

DemoSend

cody.soap.demo.DemoSend

DemoReceiver

cody.soap.demo.DemoReceiver

DemoSend

/DemoSend

DemoReceiver

/DemoReceiver

DemoSend.java

Java代码  fe9996168614f52c10a9978c08d8085a.png

package cody.soap.demo;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.net.URL;

import javax.activation.DataHandler;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.xml.soap.AttachmentPart;

import javax.xml.soap.MessageFactory;

import javax.xml.soap.SOAPBody;

import javax.xml.soap.SOAPConnection;

import javax.xml.soap.SOAPConnectionFactory;

import javax.xml.soap.SOAPEnvelope;

import javax.xml.soap.SOAPException;

import javax.xml.soap.SOAPHeader;

import javax.xml.soap.SOAPMessage;

import javax.xml.soap.SOAPPart;

public class DemoSend extends HttpServlet {

/**

*

*/

private static final long serialVersionUID = 1L;

private SOAPConnection connection;

@Override

public void init() throws ServletException {

super.init();

try {

SOAPConnectionFactory connectionFactory = SOAPConnectionFactory.newInstance();

connection = connectionFactory.createConnection();

} catch (UnsupportedOperationException e) {

e.printStackTrace();

} catch (SOAPException e) {

e.printStackTrace();

}

}

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String outString ="

Sending and reading the SOAP Message

";

try {

MessageFactory messageFactory = MessageFactory.newInstance();

SOAPMessage outgoingMessage = messageFactory.createMessage();

SOAPPart soappart = outgoingMessage.getSOAPPart();

SOAPEnvelope envelope = soappart.getEnvelope();

SOAPHeader header = envelope.getHeader();

SOAPBody body = envelope.getBody();

body.addBodyElement(envelope.createName("numberAvailable", "laptops", "http://ecodl.taobao.com/")).addTextNode("216");

StringBuffer serverUrl = new StringBuffer();

serverUrl.append(request.getScheme()).append("://").append(request.getServerName());

serverUrl.append(":").append(request.getServerPort()).append(request.getContextPath());

String baseUrl = serverUrl.toString();

URL url = new URL(baseUrl + "/test.html");

AttachmentPart attachmentpart = outgoingMessage.createAttachmentPart(new DataHandler(url));

attachmentpart.setContentType("text/html");

outgoingMessage.addAttachmentPart(attachmentpart);

URL client = new URL(baseUrl + "/DemoReceiver");

FileOutputStream outgoingFile = new FileOutputStream("out.msg");

outgoingMessage.writeTo(outgoingFile);

outgoingFile.close();

outString += "SOAP outgoingMessage sent (see out.msg). 
"+baseUrl+"
";

SOAPMessage incomingMessage = connection.call(outgoingMessage, client);

if (incomingMessage != null) {

FileOutputStream incomingFile = new FileOutputStream("in.msg");

incomingMessage.writeTo(incomingFile);

incomingFile.close();

outString += "SOAP outgoingMessage received (see in.msg).";

}

} catch (SOAPException e) {

e.printStackTrace();

}

try {

OutputStream outputStream = response.getOutputStream();

outputStream.write(outString.getBytes());

outputStream.flush();

outputStream.close();

} catch (IOException e) {}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doGet(req, resp);

}

}

DemoReceiver.java

Java代码  fe9996168614f52c10a9978c08d8085a.png

package cody.soap.demo;

import java.util.Iterator;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.xml.messaging.JAXMServlet;

import javax.xml.messaging.ReqRespListener;

import javax.xml.soap.MessageFactory;

import javax.xml.soap.SOAPBody;

import javax.xml.soap.SOAPElement;

import javax.xml.soap.SOAPEnvelope;

import javax.xml.soap.SOAPException;

import javax.xml.soap.SOAPMessage;

import javax.xml.soap.SOAPPart;

public class DemoReceiver extends JAXMServlet implements ReqRespListener{

/**

* Generated automatically

*/

private static final long serialVersionUID = 1L;

private static MessageFactory messageFactory = null;

@Override

public void init(ServletConfig servletConfig) throws ServletException {

super.init(servletConfig);

try {

messageFactory = MessageFactory.newInstance();

} catch (SOAPException e) {

e.printStackTrace();

}

}

@Override

public SOAPMessage onMessage(SOAPMessage msg) {

SOAPPart soappart = msg.getSOAPPart();

try {

SOAPEnvelope incomingEnvelope;

incomingEnvelope = soappart.getEnvelope();

SOAPBody body = incomingEnvelope.getBody();

Iterator> iterator = body.getChildElements(incomingEnvelope.createName("numberAvailable", "laptops", "http://ecodl.taobao.com/"));

SOAPElement element;

element = (SOAPElement) iterator.next();

SOAPMessage message = messageFactory.createMessage();

SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();

SOAPBody responsebody = envelope.getBody();

String responseText = "Got the SOAP message indicating there are " + element.getValue() + " laptops available.";

responsebody.addChildElement(envelope.createName("Response")).addTextNode(responseText);

return message;

} catch (SOAPException e) {

e.printStackTrace();

return null;

}

}

}

test.xml

Html代码  fe9996168614f52c10a9978c08d8085a.png

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

SOAP and Java

SOAP and Java

Click here to send the SOAP message.

out.msg

Xml代码  fe9996168614f52c10a9978c08d8085a.png

------=_Part_0_1985246804.1403343570084

Content-Type: text/xml; charset=utf-8

216

------=_Part_0_1985246804.1403343570084

Content-Type: text/html

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

SOAP and Java

SOAP and Java

Click here to send the SOAP message.

------=_Part_0_1985246804.1403343570084--

in.msg

Xml代码  fe9996168614f52c10a9978c08d8085a.png

Got the SOAP message indicating there are 216 laptops available.

原文:http://www.informit.com/library/content.aspx?b=STY_XML_21days&seqNum=228

在Tomcat上部署的目录结构:

webapps [This is a directory]

|____soapdemoserver [This is a directory]

|____test.html [Our starting Web page]

|____WEB-INF [This is a directory]

|____web.xml [Configures Tomcat]

|____classes [This is a directory]

|____cody/soap/demo [This is a directory]

|____DemoReceiver.class [The server servlet]

|____DemoSend.class [The client servlet]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值