`
xiongpan0807
  • 浏览: 15913 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

采用SOAP方式访问web服务

阅读更多

1.这是jax-ws方式访问web 服务的时候生成的一个 soap消息,那么 要是我们自己可以创建这样的一个消息,我们应该就可以完成服务的请求

- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://soap.xiongpan.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
       <q0:add>
            <a>1</a>
            <b>2</b>
            </q0:add>
       </soapenv:Body>
  </soapenv:Envelope>



先看看  SOAPMessage 的一个概括图 记清楚这个图 我们就很好写代码了



 

服务端发布的wsdl的如下

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!--
Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6.
-->
<!--
Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6.
-->
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://soap.xiongpan.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://soap.xiongpan.com/" name="ServerUtilImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://soap.xiongpan.com/" schemaLocation="http://localhost:9595/ns?xsd=1"/>
</xsd:schema>
</types>
<message name="add">
<part name="parameters" element="tns:add"/>
</message>
<message name="addResponse">
<part name="parameters" element="tns:addResponse"/>
</message>
<portType name="ServerUtil">
<operation name="add">
<input message="tns:add"/>
<output message="tns:addResponse"/>
</operation>
</portType>
<binding name="ServerUtilImplPortBinding" type="tns:ServerUtil">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="add">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ServerUtilImplService">
<port name="ServerUtilImplPort" binding="tns:ServerUtilImplPortBinding">
<soap:address location="http://localhost:9595/ns"/>
</port>
</service>
</definitions>



客户端用soap的方式去访问

package com.xiongpan.soap;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;

public class ClientTest {

       public static void main(String[] args) throws Exception{
            
             ///创建一个消息工厂
              MessageFactory factory=MessageFactory. newInstance();
             ///创建一个消息
              SOAPMessage  message=  factory.createMessage();
             //获得SOAPPART
             SOAPPart part= message.getSOAPPart();
            
             //获得信封(envelope)
             SOAPEnvelope  envelope=part.getEnvelope();
             //获得SOAP的body
             SOAPBody body= envelope.getBody();
             //创建一个qname  qname就是一个带命名空间的xml片段 下面这段会被翻译为
             /*
              <ns:add xmlns:ns="http://soap.xiongpan.com/">
              </ns:add>
              */
             QName qname= new QName( "http://soap.xiongpan.com/" , "add" , "ns" );
             
             SOAPBodyElement element= body.addBodyElement(qname);
             element.addChildElement( "a").setValue( "22");
            
             element.addChildElement( "b").setValue( "332");
      
            message.writeTo(System. out);
             //创建要访问的服务
            URL url= new URL( "http://localhost:9595/ns?wsdl" );
            QName sqname= new QName("http://soap.xiongpan.com/" ,"ServerUtilImplService" );
            Service service=Service. create(url,sqname);
            
             //创建Dispatch
            Dispatch<SOAPMessage> dispatch=service
                        .createDispatch( new QName("http://soap.xiongpan.com/" ,"ServerUtilImplPort" ), SOAPMessage.class , Service.Mode.MESSAGE );
            
            SOAPMessage responeMessage=   dispatch.invoke(message);
            System. out.println( "invoke----------------------------------" );
            responeMessage.writeTo(System. out);
            
            
      }
}



执行结果:
     发送的请求

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ns:add xmlns:ns="http://soap.xiongpan.com/"><a>22</a><b>332</b></ns:add></SOAP-ENV:Body></SOAP-ENV:Envelope>



invoke----------------------------------
返回的结果:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header/><S:Body><ns2:addResponse xmlns:ns2="http://soap.xiongpan.com/"><add>354</add></ns2:addResponse></S:Body></S:Envelope>







 

  • 大小: 114.7 KB
分享到:
评论

相关推荐

    WEB服务调用框架的设计与实现

    本系统通过分析web服务调用过程总的若干步骤以及联系,采用WSDL4J分析用户提供的WSDL文件,解析出所有的服务操作以及操作所使用的数据类型的数据结构,同时解析出相应操作的访问入口点为以后调用服务提供依据。...

    iif-generic-soap-client:可以执行任意 SOAP Web 服务操作的 Java 库

    这是一个 Java 库,可以执行任意 SOAP Web 服务的操作。 它采用 WSDL 的 URL 并生成与定义相对应的数据结构。 所有操作和输入字段都可以在运行时访问和设置。 执行操作后,可以读取返回值和文件附件。 一些简单的...

    cxf-repl:使用 Apache CXF 从 Jython REPL 访问 SOAP 服务

    cxf-repl 使用 Apache CXF 从 Jython REPL 访问 SOAP 服务。介绍该项目允许您使用 Jython REPL 修改 SOAP 网络服务。 由于 Apache CXF 采用代码生成方案,对于复杂的服务,使用 Jython 导航生成的类可能比在纯 ...

    Web服务下基于属性的动态访问控制模型研究 (2014年)

    采用Apache Axis2作为SOAP引擎,结合Sun XACML等相关开源工具完成了Web服务环境下ABAC模型的一个实现。本文所提模型,可以有效实现基于主体、客体和当前环境的属性来动态地、细粒度地进行WEB服务环境下的动态访问...

    基于Web服务的远程数据库访问 (2006年)

    在分析远程数据库访问方法的基础上,提出了一种基于Web服务的远程...采用HTTP作为传输协议,结合SOAP,XML,WSDL,UDDI等技术,通过Web服务的部署、发布争调用,实现了在Axis框架内利用Web服务进行远程数据库的访问。

    Acunetix Web Vulnarability Scanner 11.0.17095.1158 Retail

    随着云计算的采用和浏览器技术的进步,Web应用程序和Web服务已成为许多业务流程的核心组成部分,因此是攻击者的有利可图的目标。超过70%的网站和网络应用程序存在可能导致窃取敏感的公司数据,信用卡,客户信息和...

    服务计算与大数据.pdf

    访问规格(怎样使用服务)。对应着 binding 元素。 c.服务的位置(服务在哪里)。对应着 port 及 service 元素。 WDSL 文档分为以下两种类型: a. 服务接口 b. 服务实现 (2)一个 binding 元素为一个 portType 描述了...

    WSDL绑定样式各种组合优劣势比较及实验文档.zip

    目前Web服务的相关标准是WSDL【Web服务描述语言】,一种标准的类似XML Schema的语言,用它来详细说明Web服务和SOAP【简单对象访问协议】。两份报告:研究报告,实验报告 研究报告包含内容: (1)概述 (2)问题...

    XML课程设计报告,杨剑,电子科技大学成都学院

    银行需要一个后台程序来查看这些请求记录,并能及时更新最新的存款和贷款率利和最新的外汇对换汇率,这些也需要通过Web服务来完成。 6.开发团对不能超过4人。需求和初步设想方案不能更改,如要更改,需由杨剑老师...

    基于物联网技术的供水信息系统设计与实现

    采用Web服务技术架构了一个分层无线计算软件模型,并重点介绍了在无线环境中采用WSE确保Web服务安全以及通过异步调用Web服务、缓存Web服务、大数据量低频率访问和SOAP响应压缩等方法提高系统性能的实现方法。

    PHP采用XML-RPC构造Web Service实例教程

    目前进行Web Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。 PHP自身就集成了XML-RPC和SOAP...

    Silverlight WPF源码收集

    本教程及文章教你如何在ASP.NET 3.0中使用LINQ实现三层Web网站应用程序,这里其实准确的说是多层,分别是:表现层、业务逻辑层、数据访问层、数据库层。代码将实现这个传统的层次结构,不同的是使用LINQ访问SQL替换...

    ASP.NET在线测评系统

    3) 提供对WEB服务的支持,且平台自动完成WEB服务的建设,隐藏了SOAP 、WSDL 、XML的复杂性。 4)CLR集成了内存和过程的管理从而实现了系统的可伸缩性,而绝大多数系统的功能都集中在CLR中,因此,不需要再付出...

    北京中科信软 Visual Basic.NET培训

    WSDL,SOAP,UDDI,生成XML Web Service Web Service中的异步调用,状态管理 事务处理,安全性,自定义身份验证 Visual Studio Team System 中的单元测试与Web测试 案例分析:基于.NET2.0的大型电子商务系统 ...

    亮剑.NET深入体验与实战精要2

    7.6.4 SOAP调用Web Service 293 7.7 WinForm如何调用Web Service 295 7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动发送HTTP请求调用Web Service 295 7.8 实现异步调用Web Service 297 7.9 如何保证Web ...

    亮剑.NET深入体验与实战精要3

    7.6.4 SOAP调用Web Service 293 7.7 WinForm如何调用Web Service 295 7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动发送HTTP请求调用Web Service 295 7.8 实现异步调用Web Service 297 7.9 如何保证Web ...

    ASP EXCEL导入SQL

     我们把现有基于SOAP的网络服务和基于REST/HTTP网络服务作个比喻,前者是一种传统的寄信方式,而后者是现代网络的电子邮件方式。要是是寄信和电子邮件都有病毒存在的话,传统的寄信被送到对方就很危险,而电子邮件...

    Java EE常用框架.xmind

    SOAP-Simple Object Access Protocol(简单对象访问协议) SOA(Service-Oriented Architecture) :面向服务的架构 它是一种思想,IBM大力倡导是即插即用的,IBM大力提倡,希望以组装电脑的方式来开发...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

Global site tag (gtag.js) - Google Analytics