`
tedygrate
  • 浏览: 31351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Axi2学习总结及如何在client端加入header头

阅读更多

最近项目用到WebService 要求用Axis2实现,以前没用过Axis2,最近把网上的资料加上自己的琢磨写在这里,网上大多介绍了服务端Service简单的传递字符串 和数组对象,没具体介绍传递对象里封装嵌套简单对象和数组对象,类似如下对象:

public class BuissnessInfo {

    //返回状态业务码;
	private String code;
	//数组对象;
	private User[] user;

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public User[] getUser() {
		return user;
	}

	public void setUser(User[] user) {
		this.user = user;
	}
}

 

好了,废话少说 直接贴图 配置Axis2 Webservice:

第一步:写服务端servcie:

public class HelloImpl {

	public BuissnessInfo getList(Prameters p)  throws  AppAxis2 {
		
	    System.out.println("p="+p.getCode());
		
	    System.out.println("p="+p.getCode2());
		
	    BuissnessInfo info = new BuissnessInfo();
		User user = new User();
		user.setId("1");
		user.setName("张三");
		
		User user1 = new User();
		user1.setId("2");
		user1.setName("李四");
		
		User user2 = new User();
		user2.setId("3");
		user2.setName("王五");
		
		User user3 = new User();
		user3.setId("4");
		user3.setName("小六");
		
		User[] users = new User[]{user,user1,user2,user3};

		info.setCode("00000000001");
		info.setUser(users);
		return info;
	}


}

 

public class User {
	private String id;
	private String name;

	private String errorCode;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 

暴露服务接口方法:配置services.xml

<service name="Hello">

	<parameter name="ServiceClass">
		HelloImpl
	</parameter>
	<operation name="getList">
		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
	</operation>
</service>

 好了服务端生成好了 直接访问:http://127.0.0.1:8090/HelloWorld/services/Hello?wsdl 看是否发布成功;

客户端代码实现如下:客户端也是用axis2实现的,axis2实现的客户端调用方式比较多,为了能满足对象里封装对象数组和简单对象 的需求,我采用了stub ,用wsdl2java方式生成,命令如下:

%AXIS2_HOME%\bin\wsdl2java -uri http://127.0.0.1:8090/HelloWorld/services/Hello?wsdl -p client -s -o stub

 当然 wsdl2java 工具得上网上下,下载后 %AXIS2_HOME%类似于java_home 得配置下环境变量;

最后在 你的当前目录下会生成一个stub目录 里面有生成的客户端文件

客户端文件生成好后调用如下:

package client;

import java.rmi.RemoteException;

public class Client {

    public static void main(String args[]) throws RemoteException, AppAxis2Exception{
        
        HelloStub stub = new HelloStub();
        HelloStub.GetList gg = new HelloStub.GetList();
        HelloStub.Prameters param = new HelloStub.Prameters();
        param.setCode("test");
        param.setCode2("hello ");
        gg.setP(param);
      //调用
        HelloStub.BuissnessInfo info  = stub.getList(gg).get_return();
        //返回
        String ss =info.getCode();
        HelloStub.User[] strArray = info.getUser();
        for (HelloStub.User s : strArray)
            System.out.println("id="+s.getId()+"name="+s.getName());
        System.out.println(ss);
    }
}

 完成系统输出:

id=1name=张三
id=2name=李四
id=3name=王五
id=4name=小六
00000000001

 

 当然 或许你还会说 为了安全考虑 Axis2生成了客户端代码,但是服务端要求用户名、密码验证,不知道客户端如何加入?(资料出处  axis2 客户端调用wss4j 安全web服务的方法 http://blog.csdn.net/bibitoo712/archive/2008/10/30/3184252.aspx)

其实很简单:直接上图了

package client;

import java.rmi.RemoteException;

import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.soap.impl.dom.SOAPHeaderBlockImpl;
import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
import org.apache.axiom.soap.impl.dom.soap11.SOAP11HeaderBlockImpl;

public class AddHeaderClinet {

    public static void main(String args[]) throws RemoteException, AppAxis2Exception{
        
        HelloStub stub = new HelloStub();
        HelloStub.GetList gg = new HelloStub.GetList();
        HelloStub.Prameters param = new HelloStub.Prameters();
        param.setCode("test");
        param.setCode2("hello ");
        gg.setP(param);
      
        
        
        SOAP11Factory factory = new SOAP11Factory();

        OMNamespace SecurityElementNamespace = factory.createOMNamespace(
                "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse");

        OMElement usernameTokenEl = factory.createOMElement("UsernameToken", SecurityElementNamespace);
        OMElement usernameEl = factory.createOMElement("Username", SecurityElementNamespace);
        OMElement passwordEl = factory.createOMElement("Password", SecurityElementNamespace);
        OMElement actionEl = factory.createOMElement("Action", SecurityElementNamespace);

        passwordEl.addAttribute(factory.createOMAttribute("Type", null,
                "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"));

        usernameEl.setText("");
        passwordEl.setText("");
        usernameTokenEl.addChild(usernameEl);
        usernameTokenEl.addChild(passwordEl);
        usernameTokenEl.addChild(actionEl);
        SOAPHeaderBlockImpl block = new SOAP11HeaderBlockImpl("Security", SecurityElementNamespace, factory);
        block.addChild(usernameTokenEl);
        //加入head头
        stub._getServiceClient().addHeader(block);
        
        //调用
        HelloStub.BuissnessInfo info  = stub.getList(gg).get_return();
        //返回
        String ss =info.getCode();
        HelloStub.User[] strArray = info.getUser();
        for (HelloStub.User s : strArray)
            System.out.println("id="+s.getId()+"name="+s.getName());
        System.out.println(ss);
    }
}

 

以上都是我在网上查询的资料整合,希望对大家有需求的有帮助,谢谢,希望共同探讨,同时,,我正对AXIS2在服务端对Header头报文的验证 很郁闷!!!!,期望 有高手给指点下,谢谢

分享到:
评论

相关推荐

    AXI&APB2SPI_spiapb_spi转APB_axi数据转spi_axi总线_SPI2APB

    在嵌入式系统设计中,AXI (Advanced eXtensible Interface) 和 APB (Advanced Peripheral Bus) 是两种常见的总线协议,它们用于处理器与其他硬件组件之间的通信。SPI (Serial Peripheral Interface) 则是一种简单的...

    AXI_HP读写代码.zip

    AXI_HP(High-Performance...总的来说,这个压缩包提供的代码示例是针对ARM9处理器的AXI_HP接口实现PL端到PS端的内存读写功能,通过理解AXI协议的原理和信号交互,可以进一步深入学习和优化代码以适应不同的应用需求。

    webservice-axi/axi2/-maven开发示例

    在IT行业中,Web服务是一种广泛使用的技术,它允许不同系统之间通过互联网进行...通过学习和实践这个示例,你将对AXI2和Maven在Web服务开发中的应用有更深入的理解。同时,这也将帮助你快速上手其他复杂的Web服务项目。

    AXI&APB2SPI_spiapb_spi转APB_axi数据转spi_axi总线_SPI2APB_源码.zip

    总之,"AXI&APB2SPI_spiapb_spi转APB_axi数据转spi_axi总线_SPI2APB_源码.zip"提供的源代码可能是一个关键的硬件接口IP,对于需要在AXI或APB系统中集成SPI设备的设计者来说,这是一个非常有价值的资源。

    emif2axi.rar_AXI_axi转emif_emif axi_emif axi

    emif 接口转axi总线,测试功能正常使用,不包含仿真文件

    AXI总线(轻松搞定AXI总线)源码和验证工程AXI4.rar

    通过这些源码和验证工程,学习者可以深入理解AXI总线的工作原理,包括地址、数据、控制信号的交互,以及如何在VIVADO这样的开发环境中实现和调试AXI设计。同时,通过模拟和实际板级测试,能够检验设计的正确性和性能...

    amba_axi3.0_axi4.0_axi5.0_protocol_spec.docx

    ### AMBA AXI3.0, AXI4.0, 和 AXI5.0 协议详解 #### 一、AMBA AXI 协议概述 AMBA (Advanced Microcontroller Bus Architecture) 是一种开放标准总线协议体系结构,主要用于芯片内各组件之间的通信。ARM 公司开发了...

    i_axi_x2h.zip

    2. 数据缓冲区:用于暂存AXI总线传输的数据,以便在AHB总线上按照其时序规则进行传输。 3. 控制信号转换逻辑:处理AXI和AHB之间的握手信号,如读/写使能、应答和等待状态信号。 4. 错误处理:检测和报告潜在的协议...

    axi_ad9361.rar_AXI_axi 9361_axi 9361_axi ad9361_axi 驱动

    总结来说,AXI_AD9361项目是一个基于Verilog的硬件驱动实现,利用AXI总线协议与AD9361收发器进行通信,实现了数据的高效传输。这个工程不仅涉及到高级的硬件描述语言编程,还需要深入理解AXI协议和AD9361的特性,...

    axi2客户端调用的几种方式

    在实际学习过程中,结合这些代码示例进行实践将有助于加深对AXIS2客户端调用的理解。 总的来说,掌握AXIS2客户端调用的不同方式对于开发高质量的Web服务至关重要。理解并熟练运用这些方法,可以让你在处理分布式...

    zynq pl通过axi总线读写ps端ddr,完整程序压缩包

    在这个“zynq pl通过axi总线读写ps端ddr”的项目中,重点在于实现PL中的AXI DDR控制器。控制器的设计通常包括地址映射、读写请求的生成、数据的传输以及必要的等待状态控制。开发者需要精确地控制时钟域之间的数据...

    AXI4_specification.rar_AXI_AXI 协议_axi4

    在本资料“AXI4_specification.rar”中,包含了关于AXI4协议的详细规格书,对于AXI总线的开发者来说,是一份不可或缺的参考资源。 AXI4协议的核心在于其分层和异步的设计,允许不同速度和带宽的组件进行有效通信。...

    axi_lite.rar

    在你提供的"axi_lite.rar"压缩包中,包含了一个使用Vivado 2018.2版本设计的AXI-LITE回环工程。这个工程允许数据从处理器系统(PS)写入,经过可编程逻辑(PL)中的AXI-LITE接口,然后返回到处理器系统,并通过串口...

    AMBA AXI andACE Protocol Specification.zip_AMBA_AXI_AXI protocal

    2. **AXI4**:AXI4在AXI3的基础上增加了流(Stream)接口和重叠读写功能,使得多个连续数据传输可以在同一时间进行。此外,它引入了写响应通道,确保写操作的顺序性和正确性。 3. **AXI4-Lite**:针对资源有限的...

    axi4_AXI4_LITE_axi4_AXI4-AXI4_LITE_

    AXI4(Advanced eXtensible Interface 4)是一种高性能的接口规范,广泛应用于FPGA和ASIC设计中,用于在处理器、存储器和其他系统组件之间传输数据。它提供了多种通道,包括数据(Write Data和Read Data)、地址...

    axi_master_latest.tar.gz_AXI master_AXI 仿真_AXI源代码_axi 代码_axi_mas

    在实际应用中,开发者可以利用这个AXI Master模块直接在他们的设计中,通过修改配置参数以适应具体需求,或者作为学习AXI协议和VHDL设计的实例。通过深入理解和使用这些代码,不仅可以提高设计效率,也能增强对AXI...

    介绍 AXI 协议的 PPT, 因为做 AXI 的桥,学习过程中写的;

    ### AXI协议详解 #### 一、概述 AXI(Advanced eXtensible Interface)协议作为AMBA(Advanced Microcontroller Bus Architecture)3.0规范的一部分,是ARM公司为解决高性能处理器设计中的通信瓶颈问题而提出的一...

    AXI总线协议(中文)+AXI总线协议(英文)

    理解AXI协议需要深入学习其地址空间、事务类型、握手信号、数据包格式等内容。通过阅读中文和英文版本的文档,你可以详细了解这些概念,以及如何在实际设计中应用AXI协议来优化系统的性能和功耗。对于硬件设计师来说...

    AXI_Stream_TEST.7z

    这些源代码将定义数据传输路径,包括如何从输入接收数据,如何通过AXI Stream接口传输,以及如何在输出端处理数据。 2. **测试向量**:测试向量用于验证AXI Stream IP核的正确性。它们提供了一组预定义的数据输入,...

    详解ZYNQ里AXI4&AXI4;-Lite&AXI4;-Stream协议

    ### ZYNQ中AXI4、AXI4-Lite与AXI4-Stream协议详解 #### 一、AXI4协议概述 AXI4(Advanced eXtensible Interface)是ARM公司开发的一种高性能、可扩展的接口标准,主要用于连接处理器和其他外围设备。AXI4协议支持...

Global site tag (gtag.js) - Google Analytics