SOAP是把基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。
准备:
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,这个需要额外下载
然后倒入。
代码结构:
web.xml代码如下:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> <web-app> <servlet> <servlet-name>DemoSend</servlet-name> <servlet-class>cody.soap.demo.DemoSend</servlet-class> </servlet> <servlet> <servlet-name>DemoReceiver</servlet-name> <servlet-class>cody.soap.demo.DemoReceiver</servlet-class> </servlet> <servlet-mapping> <servlet-name>DemoSend</servlet-name> <url-pattern>/DemoSend</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>DemoReceiver</servlet-name> <url-pattern>/DemoReceiver</url-pattern> </servlet-mapping> </web-app>
DemoSend.java
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 ="<HTML><H1>Sending and reading the SOAP Message</H1><P>"; 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). <BR>"+baseUrl+"<BR>"; 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).</HTML>"; } } 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
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
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <HEAD> <TITLE>SOAP and Java</TITLE> </HEAD> <BODY> <H1>SOAP and Java</H1> Click <A HREF="DemoSend">here</a> to send the SOAP message. </BODY> </HTML>
out.msg
------=_Part_0_1985246804.1403343570084 Content-Type: text/xml; charset=utf-8 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <laptops:numberAvailable xmlns:laptops="http://ecodl.taobao.com/">216</laptops:numberAvailable> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ------=_Part_0_1985246804.1403343570084 Content-Type: text/html <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <HEAD> <TITLE>SOAP and Java</TITLE> </HEAD> <BODY> <H1>SOAP and Java</H1> Click <A HREF="DemoSend">here</a> to send the SOAP message. </BODY> </HTML> ------=_Part_0_1985246804.1403343570084--
in.msg
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <Response>Got the SOAP message indicating there are 216 laptops available. </Response> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
原文: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]
相关推荐
少儿编程scratch项目源代码文件案例素材-岩浆生存 双人游戏.zip
2024安全行业大模型技术应用态势发展报告-中国通信标准化协会
scratch少儿编程逻辑思维游戏源码-海上遭遇.zip
少儿编程scratch项目源代码文件案例素材-羊羊繁殖V1.zip
通信行业:“数据要素X”三年行动规划,面向应用场景挖掘数据价值
内容概要:文章详细探讨了数据连接性和云集成在增强汽车电子电气架构(EEA)方面的重要作用。首先介绍了从分布式到集中式架构的技术演进,解释了域集中式和中央集中式架构的优势,如远程软件升级(OTA)、软硬件解耦等。其次,阐述了云平台在远程软件更新、数据存储与分析等方面的支持作用。接着,强调了数据连接性在实时通信、低延迟决策、多模态传感器融合以及工业物联网集成中的核心作用。此外,讨论了云集成在个性化服务、AI助手、自动驾驶训练与仿真、预测性维护等方面的应用。最后,分析了市场需求与政策支持对这一领域的影响,并展望了未来的发展趋势,如5G-A/6G、边缘计算与AI大模型的融合。 适用人群:汽车电子工程师、智能网联汽车行业从业者及相关领域的研究者。 使用场景及目标:①理解汽车电子电气架构从分布式到集中式的演进过程及其带来的优势;②掌握数据连接性和云集成在提升车辆智能化水平的具体应用和技术细节;③了解相关政策法规对智能网联汽车发展的支持与规范;④探索未来技术发展趋势及其可能带来的变革。 其他说明:本文不仅提供了技术层面的深入解析,还结合了实际应用案例,如特斯拉、蔚来、中联重科、约翰迪尔等企业的实践成果,有助于读者全面理解数据连接性和云集成在现代汽车工业中的重要地位。同时,文中提及的政策法规也为行业发展指明了方向。
少儿编程scratch项目源代码文件案例素材-消灭病毒大作战.zip
scratch少儿编程逻辑思维游戏源码-靶子射击.zip
scratch少儿编程逻辑思维游戏源码-飞翔圣诞老人.zip
scratch少儿编程逻辑思维游戏源码-尖刺.zip
少儿编程scratch项目源代码文件案例素材-小圆点.zip
scratch少儿编程逻辑思维游戏源码-疾速逃生.zip
scratch少儿编程逻辑思维游戏源码-火柴人地底冒险.zip
scratch少儿编程逻辑思维游戏源码-吉文战争.zip
scratch少儿编程逻辑思维游戏源码-荒野跑酷.zip
基于java开发的以酒交友的社交APP软件+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于java开发的以酒交友的社交APP软件+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于java开发的以酒交友的社交APP软件+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于java开发的以酒交友的社交APP软件+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于java开发的以酒交友的社交APP软件+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于java开发的以酒交友的社交APP软件+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于java开发的以酒交友的社交APP软件+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用
scratch少儿编程逻辑思维游戏源码-滚动天空3D 创造版.zip
scratch少儿编程逻辑思维游戏源码-孤岛绿洲.zip
内容概要:本文档详细介绍了利用MATLAB编程实现Heilder模型对雷电波激励下空间任意点处的时域和频域波形进行分析的方法。首先定义了一个用于计算雷电通道底部电流的Heilder模型函数,该函数能够模拟不同参数条件下的雷电电流波形。接着,通过设定观测点参数和雷电参数,在时域中计算电场强度,并解释了如何使用离散差分方法代替复杂的积分方程求解。对于频域分析,则采用了快速傅里叶变换(FFT)将时域信号转换为频域表示,同时给出了相应的频域计算公式以及绘图指导。此外,还提供了若干编程技巧和注意事项,如避免数值计算溢出、防止频谱泄漏等。 适用人群:电气工程专业学生、从事电磁兼容研究的技术人员、对雷电现象感兴趣的科研工作者。 使用场景及目标:适用于需要理解和掌握雷电波传播特性的研究人员,帮助他们更好地理解雷电波的空间分布规律,从而应用于防雷保护系统的设计优化等方面。 其他说明:文中提供的所有代码均可以在MATLAB R2020a及以上版本环境中正常运行,且附带详细的注释以便于初学者学习。
vs_community__VS2019 防止以后不好找