apache soap

tongdayong1981 2007-02-11 03:13:28
我调试了oreilly上面的apache soap的狸子,遇到一个错误,望指教

//PO.xml

<?xml version="1.0" encoding="UTF-8"?>
<PurchaseOrder xmlns="urn:oreilly-jaws-samples">
<shipTo country="US">
<name>Joe Smith</name>
<street>14 Oak Park</street>
<city>Bedford</city>
<state>MA</state>
<zip>01730</zip>
</shipTo>
<items>
<item partNum="872-AA">
<productName>Candy Canes</productName>
<quantity>444</quantity>
<price>1.68</price>
<comment>I want candy!</comment>
</item>
</items>
</PurchaseOrder>


//apache soap deployment desciptor

<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:oreilly-jaws-samples" type="message">
<isd:provider type="java" scope="Application" methods="PurchaseOrder PurchaseOrderWithAttachment">
<isd:java class="soap.PurchaseOrderAcceptor"/>
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
</isd:service>

//SimpleGenericHTTPSoapClient
package soap;

import java.io.*;
import java.util.*;

import javax.xml.soap.Node;

import org.apache.soap.Header;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

public class SimpleGenericHTTPSoapClient {
// ////////////
// Default values used if no command line parameters are set
//private static final String DEFAULT_HOST_URL = "http://localhost:8080/SoapTest/SimpleHTTPReceive";
private static final String DEFAULT_HOST_URL = "http://localhost:8080/soap/servlet/rpcrouter";

private static final String DEFAULT_DATA_FILENAME = "./PO.xml";

private static final String URI = "urn:oreilly-jaws-samples";

// ////////////
// Member variables
private String m_hostURL;

// data file that will be the body content of a soap envelop
private String m_dataFileName;

public SimpleGenericHTTPSoapClient(String hostURL, String dataFileName)
throws Exception {
m_hostURL = hostURL;
m_dataFileName = dataFileName;
System.out.println();
System.out
.println("____________________________________________________");
System.out.println("Starting SimpleGenericHTTPSoapClient:");
System.out.println(" host url = " + m_hostURL);
System.out.println(" data file = " + m_dataFileName);
System.out
.println("____________________________________________________");
System.out.println();
}

public void sendSOAPMessage() {
try {
// get soap body to include in the SOAP envelope
FileReader fr = new FileReader(m_dataFileName);
javax.xml.parsers.DocumentBuilder xdb = org.apache.soap.util.xml.XMLParserUtils
.getXMLDocBuilder();
org.w3c.dom.Document doc = xdb
.parse(new org.xml.sax.InputSource(fr));
if (doc == null) {
throw new org.apache.soap.SOAPException(
org.apache.soap.Constants.FAULT_CODE_CLIENT,
"parsing error");
}

Vector headElements=new Vector();
Element headElement =doc.createElementNS("urn:oreilly-jaws-samples",
"jaws:MessageHeader");

Element e=doc.createElement("From");
Text textNode=doc.createTextNode("Me");
e.appendChild(textNode);
headElement.appendChild(e);

e=doc.createElement("To");
textNode=doc.createTextNode("You");
e.appendChild(textNode);
headElement.appendChild(e);

e=doc.createElement("MessageId");
textNode=doc.createTextNode("12332333");
e.appendChild(textNode);
headElement.appendChild(e);


headElements.add(headElement);

// Create the SOAP envelope
org.apache.soap.Envelope envelope = new org.apache.soap.Envelope();
Header header=new Header();
header.setHeaderEntries(headElements);
envelope.setHeader(header);
// create a vector for collecting the body elements
Vector bodyElements = new Vector();
// obtain the top-level DOM element and place it into the vector
bodyElements.add(doc.getDocumentElement());
// Create the SOAP body element
org.apache.soap.Body body = new org.apache.soap.Body();
body.setBodyEntries(bodyElements);
// Add the SOAP body element to the envelope
envelope.setBody(body);
// Build the Message.
org.apache.soap.messaging.Message msg = new org.apache.soap.messaging.Message();
msg.send(new java.net.URL(m_hostURL), URI, envelope);
System.out
.println("Sent SOAP Message with Apache HTTP SOAP Client.");
// receive response from the transport and dump it to
// the screen
System.out.println("Waiting for response....");
org.apache.soap.transport.SOAPTransport st = msg.getSOAPTransport();
BufferedReader br = st.receive();
String line = br.readLine();
if (line == null) {
System.out.println("HTTP POST was successful. \n");
} else {
while (line != null) {
System.out.println(line);
line = br.readLine();
}
}
}

catch (Exception e) {
e.printStackTrace();
}
}

//
// NOTE: the remainder of this deals with reading arguments
//
/** Main program entry point. */
public static void main(String args[]) {
// not relevant ...
try {
SimpleGenericHTTPSoapClient client=new SimpleGenericHTTPSoapClient(DEFAULT_HOST_URL,DEFAULT_DATA_FILENAME);
client.sendSOAPMessage();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

//PurchaseOrderAcceptor
package soap;

import java.io.StringWriter;
import java.util.Enumeration;
import java.util.Vector;

import org.apache.soap.Body;
import org.apache.soap.Envelope;
import org.apache.soap.Header;
import org.apache.soap.rpc.SOAPContext;
import org.apache.soap.util.xml.DOM2Writer;
import org.w3c.dom.Element;

public class PurchaseOrderAcceptor {

public void purchaseOrder(Envelope requestEnvelope,SOAPContext request,SOAPContext response)
{
System.out.println("Receive a PurchaseOrder");
StringWriter writer=new StringWriter();
Header header=requestEnvelope.getHeader();
Vector headerEntries=header.getHeaderEntries();
writer.write("header===>>");
for(Enumeration enu=headerEntries.elements();enu.hasMoreElements();)
{
Element e= (Element) enu.nextElement();
DOM2Writer.serializeAsXML(e, writer);
}

Body body=requestEnvelope.getBody();
Vector bodyEntries=body.getBodyEntries();
writer.write("body===>>");
for(Enumeration enu=bodyEntries.elements();enu.hasMoreElements();)
{
Element e= (Element) enu.nextElement();
DOM2Writer.serializeAsXML(e, writer);
}
System.out.println(writer.toString());
try
{
response.setRootPart(
"<PurchaseOrderResponse>Accepted</PurchaseOrderResponse>",
"text/xml");
}catch(Exception e){}

}


}
运行的时后出现下面的错误,望指教!!!
.____________________________________________________
Starting SimpleGenericHTTPSoapClient:
host url = http://localhost:8080/soap/servlet/rpcrouter
data file = ./PO.xml
____________________________________________________

Sent SOAP Message with Apache HTTP SOAP Client.
Waiting for response....
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>No Deserializer found to deserialize a 'urn:oreilly-jaws-samples:shipTo' using encoding style 'null'.</faultstring>
<faultactor>/soap/servlet/rpcrouter</faultactor>
</SOAP-ENV:Fault>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

...全文
357 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongjixing 2007-02-12
  • 打赏
  • 举报
回复
帮顶
内容概要:本文是一份关于基于IKE方式实现IPSec VPN隧道建立的实验报告,详细介绍了通过IKEv1主模式、野蛮模式以及IKEv2方式建立IPSec安全关联(SA)的过程。实验涵盖多种场景,包括不同IKE版本的报文交互机制、模板方式配置中心-分支结构的IPSec隧道,以及NAT穿越功能的实现。文中提供了完整的网络拓扑设计、设备配置命令(如华为路由器与防火墙)、ACL策略、IKE提议与对等体设置、IPSec安全策略应用,并通过抓包分析验证各模式下ISAKMP报文交互流程。实验结果表明,IKE能够动态协商生成SA和SPI,提升安全性;IKEv1主模式需9个报文(前4个明文),野蛮模式6个报文(第3个起加密);而IKEv2仅需4个报文且更高效安全。此外,模板方式适用于集中管理的VPN架构,NAT-T可检测并适应中间NAT设备,确保隧道成功建立。; 适合人群:具备网络基础知识及一定路由与交换技术背景的网络工程师、信息安全技术人员或高校通信类专业学生,尤其适合正在学习或部署IPSec VPN的技术人员。; 使用场景及目标:①深入理解IKEv1与IKEv2在IPSec隧道建立中的工作机制差异;②掌握主模式与野蛮模式的报文交互特点及其应用场景;③学会配置基于模板的动态IPSec隧道以支持多分支接入;④实现NAT穿越环境下的IPSec通信;⑤通过实际抓包分析验证理论知识。; 阅读建议:本实验报告强调理论与实践结合,建议读者在模拟器(如eNSP)中复现实验拓扑,逐步配置并使用Wireshark等工具抓包分析各阶段ISAKMP/IKE报文,重点关注加密范围、协商顺序与NAT-T检测机制,以加深对IPSec密钥交换机制的理解。
源码下载地址: https://pan.quark.cn/s/2def6e303a6c download-manager build release language Hex.pm Chrome Web Store Version Chrome Web Store Users Chrome Web Store Rating Microsoft Edge Version Microsoft Edge Rating 谷歌浏览器下载管理器插件 点击插件图标即可查看所有下载文件状态 语言 简体中文 | English 下载安装 Chrome Web Store 、 Microsoft Edge Add-ons 隐私政策说明 功能 下载文件百分比进度显示 下载文件可暂停、恢复下载、取消、删除、重试 搜索所有已经下载的文件 下载危险文件时显示是否确认下载的提示框 右键复制文件名和下载链接到剪切板 下载过程中通知 下载完成提示音 快捷键 手动下载文件功能 右键下载菜单 自定义图标颜色 自定义主题 支持的语言 、、、、、 这是使用谷歌翻译后的结果,如果您有更好的建议,请创建Issues或发邮件! 步骤: 所有翻译文件位置:public/_locales/\\/*.json 进入对应语言的目录 复制、下载或者Pull Request修改后的文件,我会在检查核对后尽快上线 未来计划 以下计划按先后顺序依次开发: 解决重试下载失败文件变成新创建下载的问题 自定义下载面板主题 强迫症系列:只显示下载文件名称、下载面板停止显示飞入飞出动画 代理设置 Info 1. 最新版本:1.1.3 新增: 下载通知可一直保留在屏幕上 自定义下载面板页面大小。 设置 -> 主题 -> 下载面板 编译打包 ...

67,539

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧