问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA实现SOAP传输,不用tomcat

发布网友 发布时间:2022-05-04 16:22

我来回答

7个回答

懂视网 时间:2022-05-04 20:44

问题的提出: 我做了一个图书管理系统,是用三层结构实现的,客户端,服务器处理端和数据端。客户端提出请求,服务器端响应,同时将从数据服务器得来的结果以SOAP 消息 发送回客户端,客户端解析SOAP 消息 ,将结果显示给用户。 实现方法: 好了,话不多说,

问题的提出:

我做了一个图书管理系统,是用三层结构实现的,客户端,服务器处理端和数据端。客户端提出请求,服务器端响应,同时将从数据服务器得来的结果以SOAP消息发送回客户端,客户端解析SOAP消息,将结果显示给用户。

实现方法:

好了,话不多说,现在开始进入正题:

在接到客户端发来的请求后,我用ADO连接数据服务器并查询(我用的是Access),得到结果集Recordset以后,将结果集中有关图书信息格式化成XML文档,将其以SOAP消息形式发送回客户端

//************************封装成SOAP消息发送回客户端************************//  
      int MaxRows=0;//用来获得总的行数
      while(!pRs->EndOfFile)
      {
        MaxRows++;
        pRs->MoveNext();
      }
      pRs->MoveFirst();//这是必须的,现在记录已是最后一行了
      
      int nFields;
      nFields=pRs->Fields->GetCount(); //得到字段总数
      
      CMarkup xml;
      xml.SetDoc("
");
      xml.AddElem( "RESULT" );
      for(int j=0;j      {
        xml.AddChildElem( "BOOK" );
        xml.IntoElem();
        for(int k=0;k        {
          _bstr_t name=pRs->Fields->GetItem((long)k)->GetName();
          _bstr_t value=pRs->Fields->GetItem((long)k)->GetValue();
          xml.AddChildElem((char *)name,(char *)value);
        }
        xml.OutOfElem();
        pRs->MoveNext();
      }
      xml.Save("Temp.xml");
      //MessageBox("xml文件生成成功");
      CFile file;
      file.Open("Temp.xml",CFile::modeRead | CFile::typeBinary);
      byte buf[64*1024];
      memset(buf,0,64*1024);
      file.ReadHuge(buf,file.GetLength());
      //用socket发送
      send(m_sockClient[i],(char *)buf,file.GetLength()+1,0);
      file.Close();
  在这里我要说明一下,在解析XML文件的时候,我借用了CMarkup类,十分感谢它的作者,因为他们的努力使得我们在解析XML文件的时候可以轻而已举,这里再一次感谢他们!也推荐大家在解析XML文件的时候不妨试试这个类,非常的好用!

上面的代码还比较好懂,我也就不多解释什么了(高手们可别笑话我哦~~)

在接受到服务器端的SOAP消息后,客户端就可以解析SOAP消息并把结果显示出来了:

  CFile file;
  file.Open("Temp.xml",CFile::modeCreate | CFile::typeBinary | CFile::modeWrite );
  file.WriteHuge(recvBuf,strlen(recvBuf));
  file.Flush();
  file.Close();
  CMarkup xml;
  if(!xml.Load("Temp.xml"))
  {
    MessageBox("加载XML文件失败!");
    return ;
  }
  ...
  
  int item=0;
  xml.ResetMainPos(); //make sure to move the point to the begin
  while (xml.FindChildElem("BOOK"))
  {
    int subItem=0;
    xml.IntoElem(); //into BOOK
    m_listCtrl.InsertItem(item,"",0); //插入一行
    CString index;
    index.Format("%d",item+1); //每行的序号
    m_listCtrl.SetItemText(item,subItem,index);
    while(xml.FindChildElem()) //循环得到节点值,也就是书的各个信息
    {
      xml.IntoElem();
      CString value=xml.GetData(); //得到值
      //MessageBox(value);
      m_listCtrl.SetItemText(item,subItem+1,value);
      subItem++;
      xml.OutOfElem();
    }
    item++;
    xml.OutOfElem(); //out BOOK
  }
好了,这就是格式化SOAP消息和解析SOAP消息主要的部分,这是本人的一点心得,愿与大家一起分享,有不对之处还请大家多多指教。

热心网友 时间:2022-05-04 17:52

@WebService(targetNamespace = CNCConstant.SERVICES_TARGETNAMESPACE)
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface IUserService {

/**
* 用户登陆接口
*/
@WebMethod(operationName = "Login")
@WebResult(name = "LoginResponse", targetNamespace = CNCConstant.PARAMETERS_TARGETNAMESPACE)
public LoginResult Login(
@WebParam(name = "Login", targetNamespace = CNCConstant.PARAMETERS_TARGETNAMESPACE)com.xxx.entry.Login login);
soap消息包含request和response这是我在公司解析登陆的soap消息用到的代码,作用直接用soap消息来调用login这个webservice的方法,entry.login是直接用jaxb解析soap消息出来的entry类,
——————————————————————————————————————
这个是jaxb直接build出来的entry类
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Login", propOrder = {
"account",
"session"
}, namespace= CNCConstant.PARAMETERS_TARGETNAMESPACE)
public class Login{

/**
*
*/
@XmlElement(name="account", namespace = CNCConstant.PARAMETERS_TARGETNAMESPACE)
protected Account account;
@XmlElement(required = true)
protected String session;

/**
* Gets the value of the account property.
*
* @return
* possible object is
* {@link Account }
*
*/
public Account getAccount() {
return account;
}

/**
* Sets the value of the account property.
*
* @param value
* allowed object is
* {@link Account }
*
*/
public void setAccount(Account value) {
this.account = value;
}

/**
* Gets the value of the session property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getSession() {
return session;
}

/**
* Sets the value of the session property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setSession(String value) {
this.session = value;
}

}
————————————————————————————————
楼主教你一个方法,声请一个小号来答,然后把最佳给它,下次再回答一题小号200分的题目,分就不用付出了,我这soap答的也不好你就这样就不用损失分了。

热心网友 时间:2022-05-04 19:10

。。。析soap玩 还socket传输?!
可以去看下axis是怎么做的

热心网友 时间:2022-05-04 20:44

smluyi
你真高…………
不是说你的代码高,是说你往回要分的方法高,高,真高!!!

热心网友 时间:2022-05-04 22:36

不是帮你回答,想知道LZ解决了这个问题没有

热心网友 时间:2022-05-05 00:44

用TCP/IP协议吗?网络编程不会!

热心网友 时间:2022-05-05 03:08

学习java中,还解决不了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何将一个文件排在文件夹的第一个? 试管婴儿胚胎分级 试管婴儿胚胎分级8优代表什么 成人高考是成绩出来之后再填志愿吗 成考有必要报第二志愿吗 成人高考被第一志愿录取就不能选择第二志愿吗,分数什么学校都能进,老... 成教可以填报二批志愿吗? 高压电线是什么钢丝 地下水资源会枯竭吗 济南受污染的原因 初级会计报名费交了就是报考成功了是吗 湖南财政中初会报名缴费成功了,照片太大了算报名成功了吗 初级会计怎么知道报名成功 怎么查询初级会计是否报名成功 初级会计怎么确认报名成功了? 东北菇娘冬季储存方法 《大悲咒》和《心经》的用途是什么? 念大悲咒的作用是什么? 大悲咒有什么作用和功效 中安民生金融资产管理有限公司是中国民政局主管吗 成都民生投资有限公司怎么样? 民生资本投资管理有限公司怎么样? 接私活接到一个宣传单的,两页四面的折页,设计费要多少钱合适。 谁能提供下设计公司的报价!详细一些.例如:画册一P多少,三折页多少,四折页,海报价格, 在此感谢大家!!!! 请问退修人员社保卡激活后还要不要到本地备案 社保卡可以网上异地备案吗 打电话被了案社保卡没激活可以跨省报销吗 无滴膜与普通大棚膜价钱差多少哪? 适宜日光温室使用的薄膜有哪些种类,各有什么特点? 流滴膜和无滴膜哪个使用的时间长 怎么看初级会计有没有报名成功 2021年初级会计报名报考人员如何确认报名成功? 初级会计缴费成功是报名成功吗? 会计报名怎么看是否成功 怎么看自己初会报名成功 儿童行程码怎么获取? abab的颜色四字词语大全 ABAB式描写颜色的四字词语 abab颜色的四字词语 abab的词语颜色的词语 关于颜色的abab词语 abab 颜色 的词语 手机qq邮箱附件能发送作文吗在哪里打开 张家口市中通速递有限公司万全县分公司介绍? 万全县的中通速递在什么位置? 中通快递地址怎么填 chovy用的什么键盘 请问张家口市地区中通快递的公司地址在什么地方? 寄个中通快递,在哪寄呢 中通快递在哪里