??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲福利在线视频,亚洲无限乱码一二三四区,国产啪亚洲国产精品无码http://www.tkk7.com/zhb8015/category/51178.htmlzh-cnTue, 05 Jun 2012 07:24:35 GMTTue, 05 Jun 2012 07:24:35 GMT60REST架构下的接口规范和用准则( 转)http://www.tkk7.com/zhb8015/articles/379943.htmlzhb8015zhb8015Mon, 04 Jun 2012 08:38:00 GMThttp://www.tkk7.com/zhb8015/articles/379943.htmlhttp://www.tkk7.com/zhb8015/comments/379943.htmlhttp://www.tkk7.com/zhb8015/articles/379943.html#Feedback0http://www.tkk7.com/zhb8015/comments/commentRss/379943.htmlhttp://www.tkk7.com/zhb8015/services/trackbacks/379943.html来自: http://hi.baidu.com/yaobodi/blog/item/f655da333ff3974fac4b5f01.html
REST架构下的接口规范和用准?/div>
2010-04-08 15:14

REST架构风格是全新的针对Web应用的开发风|是当今世界最成功的互联网媒体分布式pȝ架构Q它使得Z真正理解了Http协议本来面貌。随着 REST架构成ؓL技术,一U全新的互联|网l应用开发的思维方式开始流行?/p>

目前Q?1Q校内,内Q阿里Y件等都通过REST架构来实现^台数据的开放,与第三方的数据交换。REST已然成ؓsns开攑^?/a>的首要开放标准。下面简单介l一下REST的原理和使用准则?/p>

wiki介绍见此Q?a >http://en.wikipedia.org/wiki/Representational_State_Transfer

REST是什?/strong>

REST是英文Representational State Transfer的羃写,中文译?#8220;表述性状态{U?#8221;Q他是由Roy Thomas Fielding博士在他的论?《Architectural Styles and the Design of Network-based Software Architectures》中提出的一个术语。REST本n只是为分布式媒体系l设计的一U架构风|而不是标准?/p>

ZWeb的架构,实际上就是各U规范的集合Q这些规范共同组成了Web架构。比如Http协议Q比如客L服务器模 式,q些都是规范。每当我们在原有? 范的基础上增加新的规范,׃形成新的架构。而REST正是q样一U架构,他结合了一pd的规范,而Ş成了一U新的基于Web的架构风根{?/p>

传统的Web应用大都是B/S架构Q它包括了如下一些规??/p>

客户Q服务器

  • q种规范的提出,改善了用h口跨多个q_的可UL性,q且通过化服务器lgQ改善了pȝ的可伸羃性。最为关键的是通过分离用户接口和数据存储这两个x点,使得不同用户l端享受相同数据成ؓ了可能?/div>

无状态?/p>

  • ? 状态性是在客P服务器约束的基础上添加的又一层规范。他要求通信必须在本质上是无状态的Q即从客户到服务器的每个request都必d含理解该 request所必须的所有信息。这个规范改善了pȝ的可见性(无状态性得客L和服务器端不必保存对方的详细信息Q服务器只需要处理当? requestQ而不必了解所有的request历史Q,可靠性(无状态性减了服务器从局部错误中恢复的Q务量Q,可׾~性(无状态性得服务器端可? 很容易的释放资源Q因为服务器端不必在多个request中保存状态)。同Ӟq种规范的缺点也是显而易见得Q由于不能将状态数据保存在服务器上的共享上 下文中,因此增加了在一pdrequest中发送重复数据的开销,严重的降低了效率?/div>

~存

  • ? 了改善无状态性带来的|络的低效性,我们填加了缓存约束。缓存约束允讔R式或昑ּ地标C个response中的数据Q这样就赋予了客L~存 response数据的功能,q样可以ؓ以后的requestq~存的数据,部分或全部的消除一部分交互Q增加了|络的效率。但是用于客L~存了信 息,也就同时增加了客L与服务器数据不一致的可能Q从而降低了可靠性?/div>

B/S架构的优Ҏ光|非常方便,但在用户体验斚w却不是很理想。ؓ了改善这U情况,我们引入了REST?/p>

REST在原有的架构上增加了三个新规范:l一接口Q分层系l和按需代码?/p>

l一接口

  • REST 架构风格的核心特征就是强调组件之间有一个统一的接口,q表现在REST世界里,|络上所有的事物都被抽象源,而REST是通过通用的链接器接口? 资源q行操作。这栯计的好处是保证系l提供的服务都是解耦的Q极大的化了pȝQ从而改善了pȝ的交互性和可重用性。ƈ且REST针对Web的常见情? 做了优化Q得REST接口被设计ؓ可以高效的{Ud_度的超媒体数据Q这也就D了REST接口对其它的架构q不是最优的?/div>

分层pȝ

  • 分层pȝ规则的加入提高了各种层次之间的独立性,为整个系l的复杂性设|了边界Q通过装遗留的服务,使新的服务器免受遗留客户端的影响Q这也就提高了系l的可׾~性?/div>

按需代码

  • REST允许对客L功能q行扩展。比如,通过下蝲q执行applet或脚本Ş式的代码Q来扩展客户端功能。但q在改善pȝ可扩展性的同时Q也降低了可见性。所以它只是REST的一个可选的U束?/div>

REST的设计准?/strong>

REST架构是针对Web应用而设计的Q其目的是ؓ了降低开发的复杂性,提高pȝ的可伸羃性。REST提出了如下设计准则:

    1. |络上的所有事物都被抽象ؓ资源QresourceQ;
    2. 每个资源对应一个唯一的资源标识符Qresource identifierQ;
    3. 通过通用的连接器接口Qgeneric connector interfaceQ对资源q行操作Q?/div>
    4. 对资源的各种操作不会改变资源标识W;
    5. 所有的操作都是无状态的QstatelessQ?/div>

REST中的资源所指的不是数据Q而是数据和表现Ş式的l合Q比?#8220;最新访问的10位会?#8221;?#8220;最z跃?0Z?#8221;?数据上可能有重叠或者完全相同,?׃他们的表现Ş式不同,所以被归ؓ不同的资源,q也是Z么REST的全名是Representational State Transfer的原因。资源标识符是URI(Uniform Resource Identifier)Q不是囄QWordq是视频文gQ甚臛_是一U虚拟的服务Q也不管你是xml格式,txt文g格式q是其它文g格式Q全部通过 URI对资源进行唯一的标识?/p>

REST是基于Http协议的,M对资源的操作行ؓ都是通过Http协议来实现。以往的Web开发大多数用的都是 Http协议中的GET和POST? 法,对其他方法很用,q实际上是因为对Http协议认识片面的理解造成的。Http不仅仅是一个简单的q蝲数据的协议,而是一个具有丰富内늚|络? 件的协议。他不仅仅能对互联网资源q行唯一定位Q而且q能告诉我们如何对该资源q行操作。Http把对一个资源的操作限制?个方法以内:GET, POST,PUT和DELETEQ这正是对资源CRUD操作的实现。由于资源和URI是一一对应的,执行q些操作的时候URI是没有变化的Q这和以往? Web开发有很大的区别。正׃q一点,极大的简化了Web开发,也得URI可以被设计成更ؓ直观的反映资源的l构Q这UURI的设计被UC RESTful的URI。这位开发h员引入了一U新的思维方式Q通过URL来设计系l结构。当然了Q这U设计方式对一些特定情况也是不适用的,也就是说? 是所有的URI都可以RESTful的?/p>

REST 之所以可以提高系l的可׾~性,是因ؓ它要求所有的操作都是无状态的。由于没有了上下?Context)的约束,做分布式和集的时候就更ؓ单,? 可以让系l更为有效的利用~冲?PoolQ。ƈ且由于服务器端不需要记录客L的一pd讉KQ也减少了服务器端的性能?/p>

使用REST架构

对于开发h员来 _兛_的是如何使用REST架构Q这里我们来单谈谈这个问题。REST不仅仅是一U崭新的架构Q它带来的更是一U全新的Web开发过E中的思维方式Q? 通过URL来设计系l结构。在REST中,所有的URL都对应着资源Q只要URL的设计是良好的,那么其呈现的pȝl构也就是良好的。这点和TDD (Test Driven Development)很相|他是通过试用例来设计系l的接口Q每一个测试用例都表示一pd用户的需求。开发h员不需要一开始就~写功能Q而只需? 把需要实现的功能通过试用例的Ş式表现出来即可。这个和REST中通过URL设计pȝl构的方式类|我们只需要根据需求设计出合理地URLQ这? URL不一定非要链接到指定的页面或者完成一些行为,只要它们能够直观的表现出pȝ的用h口。根据这些URLQ我们就可以方便的设计系l结构。从 REST架构的概念上来看Q所有能够被抽象成资源的东西都可以被指定Z个URLQ而开发h员所需要做的工作就是如何能把用户需求抽象ؓ资源Q以及如何抽 象的_。因为对资源抽象的越为精,对REST的应用来说就好。这个和传统MVC开发模式中ZAction的思想差别非常大。设计良好的URLQ? 不但对于开发h员来说可以更明确的认识系l结构,对用者来说也方便记忆和识别资源,因ؓURL_单和有意义。按照以往的设计模式,很多URL后面? 是一堆参敎ͼ对于使用者来说也是很不方便的?/p>

既然RESTq? 么好用,那么是不是所有的Web应用都能采取此种架构呢?{案是否定的。我们知道,直到现在为止QMVC(Model-View-Controller) 模式依然是Web开发最普遍的模式,l大多数的公司和开发h员都采取此种架构来开发Web应用Qƈ且其思维方式也停留于此。MVC模式由数据,视图和控? 器构成,通过事g(Event)触发Controller来改变Model和View。加上Webwork,Struts{开源框架的加入QMVC开发模 式已l相当成熟,其思想Ҏ是ZAction来驱动。从开发h员角度上来说QN然接受一个新的架构会带来风险Q其中的不确定因素太多。ƈ且REST? 的思维方式是把所有用户需求抽象ؓ资源Q这在实际开发中是比较难做到的,因ؓq不是所有的用户需求都能被抽象源,q样也就是说不是整个pȝ的结构都? 通过REST的来表现。所以在开发中Q我们需要根据以?Ҏ在REST和MVC中做出选择。我们认为比较好的办法是LREST和MVCQ因适合l? 大多数的Web应用开发,开发h员只需要对比较Ҏ能够抽象源的用户需求采取REST的开发模式,而对其它需求采取MVC开发即可。这里需要提到的? 是ROR(Ruby on Rails)框架Q这是一个基于Ruby语言的越来越行的Web开发框Ӟ它极大的提高了Web开发的速度。更为重要的是,ROR(?.2版本?? 架是W一个引入REST做ؓ核心思想的Web开发框Ӟ它提供了对REST最好的支持Q也是当今最成功的应用REST的Web开发框架。实际上QROR? REST实现是REST和MVCLQ开发h员采用ROR框架Q可以更快更好的构徏Web应用?/p>

对开发h员来_REST不仅仅在Web开发上贡献了自q力量Q同时也让我们学C如何把Y件工E原则系l地应用于对一个真实Y件的设计和评C



zhb8015 2012-06-04 16:38 发表评论
]]>xfire 与spring完整集成实例(?http://www.tkk7.com/zhb8015/articles/378208.htmlzhb8015zhb8015Tue, 15 May 2012 09:42:00 GMThttp://www.tkk7.com/zhb8015/articles/378208.htmlhttp://www.tkk7.com/zhb8015/comments/378208.htmlhttp://www.tkk7.com/zhb8015/articles/378208.html#Feedback0http://www.tkk7.com/zhb8015/comments/commentRss/378208.htmlhttp://www.tkk7.com/zhb8015/services/trackbacks/378208.html
首先打开Myeclipse8.x以上版本..因ؓ我这里共享那些xfire 目所需要的jar都是Myeclipse自带d的,所以要求大家伙准备好myeclipse8.x或者更高版本的..q里是spring2.0与xfire1.2整合..废话说..转正正传..

 

1.打开Myeclipse--->new project-->目名随便吧..最好是有意义的名称..看v来比较舒?.


2--配置web.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


  <context-param>

   <param-name>contextConfigLocation</param-name>

   <param-value>classpath:applicationContext.xml,classpath:org/codehaus/xfire/spring/xfire.xml</param-value>

  </context-param>


<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>


   <listener>

<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>

</listener>

  <servlet>

    <servlet-name>XFireServlet</servlet-name>

    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>

    <load-on-startup>0</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>XFireServlet</servlet-name>

    <url-pattern>/services/*</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>

 


3.配置applicationContext.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<beans

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:jee="http://www.springframework.org/schema/jee"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

 http://www.springframework.org/schema/aop

 http://www.springframework.org/schema/aop/spring-aop-2.0.xsd

 http://www.springframework.org/schema/tx

 http://www.springframework.org/schema/tx/spring-tx-2.0.xsd

 http://www.springframework.org/schema/jee

 http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"

 default-autowire="byName" default-lazy-init="true"

 >

 <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>

 <import resource="xfire-servlet.xml"/>

</beans>

 

 

 

 

4.配置xfire-servlet.xml

 

Z不给大家伙困?所以我q里用那个就打开那个配置..

 

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"

"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

<!-- 

<bean id="HellWorldSimple" class="org.codehaus.xfire.spring.ServiceBean">

<property name="name">

<value>HelloWorldSimple</value>

</property>

<property name="namespace">

<value>http://service.core.xfire.com</value>

</property>

<property name="serviceClass">

<value>com.xfire.core.service.IHelloWorld</value>

</property>

<property name="serviceBean">

<ref bean="HellWorldSimple"/>

</property>

</bean>

-->

<!-- 

  <bean id="MyHandle" class="org.codehaus.xfire.spring.ServiceBean">

<property name="name">

<value>MyHandle</value>

</property>

<property name="namespace">

<value>http://service.core.xfire.com</value>

</property>

<property name="serviceClass">

<value>com.xfire.core.handler.MyHandlerImpl</value>

</property>

<property name="serviceBean">

<ref bean="MyHandle"/>

</property>

</bean>

 -->



<bean id="UserInfoService" class="org.codehaus.xfire.spring.ServiceBean">

<property name="name">

<value>UserInfo</value>

</property>

<property name="namespace">

<value>http://service.core.xfire.com/UserInfoService</value>

</property>

<property name="serviceClass">

<value>com.xfire.core.service.IUserInfoService</value>

</property>

<property name="serviceBean">

<ref bean="UserInfoService"/>

</property>

</bean>

<!--  

   <bean id="ApplictionException" class="org.codehaus.xfire.spring.ServiceBean">

<property name="name">

<value>ApplictionException</value>

</property>


<property name="namespace">

<value>http://service.core.xfire.com/IMyExceptionSevice</value>

</property>

<property name="serviceClass">

<value>com.xfire.core.service.IMyExceptionSevice</value>

</property>

<property name="serviceBean">

<ref bean="ApplictionException"/>

</property>

</bean>

-->

 

 

 

 <!--  

   <bean id="IServiceMap" class="org.codehaus.xfire.spring.ServiceBean">

<property name="name">

<value>AddressService</value>

</property>


<property name="namespace">

<value>http://service.core.xfire.com/IServiceMap</value>

</property>

<property name="serviceClass">

<value>com.xfire.core.service.IServiceMap</value>

</property>

<property name="serviceBean">

<ref bean="IServiceMap"/>

</property>

</bean>

-->

 

</beans>


 

 

5.xfire-servlet.xml配置

 

 

<?xml version="1.0" encoding="UTF-8"?>

<beans>

<!--

    在没整合spring之前的xfire是这L配置

  当要整合spring之后的这句代码复制到service 节点

  xmlns="http://xfire.codehaus.org/config/1.0"

  <beans xmlns="http://xfire.codehaus.org/config/1.0">

 -->

<service xmlns="http://xfire.codehaus.org/config/1.0">


 

 <name>UserInfo</name>

 <namespace>http://service.core.xfire.com</namespace>

 <serviceClass>com.xfire.core.service.IUserInfoService</serviceClass>

 <implementationClass>com.xfire.core.service.impl.UserInfoServiceImpl

 </implementationClass>

 <scope>request</scope>

 

 

<!-- 

<name>HelloWorldSimple</name>

<namespace>http://service.core.xfire.com</namespace>

<serviceClass>com.xfire.core.service.IHelloWorld</serviceClass>

<implementationClass>com.xfire.core.service.impl.HelloWorldImpl</implementationClass>

<style>wrapped</style>

<use>literal</use>

<scope>request</scope>

-->

<!--  

<name>MyHandle</name>

<namespace>http://service.core.xfire.com</namespace>

<serviceClass>com.xfire.core.handler.IMyHandler</serviceClass>

<implementationClass>com.xfire.core.handler.MyHandlerImpl</implementationClass>

<scope>application</scope>

 -->

 <!-- 

<name>ServiceMap</name>

<namespace>http://service.core.xfire.com</namespace>

<serviceClass>com.xfire.core.service.IServiceMap</serviceClass>

<implementationClass>com.xfire.core.service.impl.ServiceMapImpl

</implementationClass>

<scope>request</scope>

 -->

 

 

<!-- 

<name>ApplictionException</name>

<namespace>http://service.core.xfire.com</namespace>

<serviceClass>com.xfire.core.service.IMyExceptionSevice</serviceClass>

<implementationClass>com.xfire.core.service.impl.MyExceptionSeviceImpl</implementationClass>

<scope>request</scope>

-->

 

</service>

</beans>

 

 


实现代码..

首先新徏一个实体类UseInfor

package com.xfire.core.entity;

 

import java.io.Serializable;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

/**

 *@author jilongliang

 *@Date 2012-2-29

 */

@SuppressWarnings("all")

public class UserInfo implements Serializable {

 

private Integer identifier;

 

private String address;

private String city;

private String proivice;

 

public Integer getIdentifier() {

return identifier;

}

 

public void setIdentifier(Integer identifier) {

this.identifier = identifier;

}

 

public String getAddress() {

return address;

}

 

public void setAddress(String address) {

this.address = address;

}

 

public String getCity() {

return city;

}

 

public void setCity(String city) {

this.city = city;

}

 

public String getProivice() {

return proivice;

}

 

public void setProivice(String proivice) {

this.proivice = proivice;

}

 

public String getCountry() {

return country;

}

 

public void setCountry(String country) {

this.country = country;

}

 

public String getPostCode() {

return postCode;

}

 

public void setPostCode(String postCode) {

this.postCode = postCode;

}

 

public String[] getArrary() {

return arrary;

}

 

public void setArrary(String[] arrary) {

this.arrary = arrary;

}

 

public List<Integer> getList() {

return list;

}

 

public void setList(List<Integer> list) {

this.list = list;

}

 

public Map<Integer, InnerClass> getMap() {

return map;

}

 

public void setMap(Map<Integer, InnerClass> map) {

this.map = map;

}

 

public boolean isExist() {

return isExist;

}

 

public void setExist(boolean isExist) {

this.isExist = isExist;

}

 

public InnerClass getInner() {

return inner;

}

 

public void setInner(InnerClass inner) {

this.inner = inner;

}

 

private String country;

private String postCode;

private String[] arrary;

private List<Integer> list;

 

private Map<Integer, InnerClass> map;

 

private boolean isExist;

private InnerClass inner;

 

public UserInfo() {

 

list = new ArrayList<Integer>();

list.add(1);

list.add(2);

list.add(3);

 

map = new HashMap<Integer, InnerClass>();

map.put(1, new InnerClass("a"));

map.put(2, new InnerClass("b"));

map.put(3, new InnerClass("c"));

 

inner = new InnerClass();

inner.setInnerName("服务器地址: Address InnerClass");

 

}

 

@Override

public String toString() {

return "Address [address=" + address + ", arrary="

+ Arrays.toString(arrary) + ", city=" + city + ", country="

+ country + ", identifier=" + identifier + ", inner=" + inner

+ ", isExist=" + isExist + ", list=" + list + ", map=" + map

+ ", postCode=" + postCode + ", proivice=" + proivice + "]";

}

 

}



----内置实体c?/span>
package com.xfire.core.entity;

import java.io.Serializable;

/**
 *@Project xfire
 *@author jilongliang
 *@Date 2012-2-29
 *@Class InnerClass.java
 */
@SuppressWarnings("all")
public class InnerClass implements Serializable {

private String innerName = "static InnerClass";

public String getInnerName() {
return innerName;
}

public void setInnerName(String innerName) {
this.innerName = innerName;
}

public InnerClass() {
}

public InnerClass(String innerName) {
super();
this.innerName = innerName;

}
}



其次一个接口类:
package com.xfire.core.service;

import java.util.List;

import com.xfire.core.entity.UserInfo;

/**
 *@author jilongliang
 *@Date 2012-2-29
 */
public interface IUserInfoService {
public List<UserInfo> getAddressList();

public List<UserInfo> setAddresses(List<UserInfo> list);
}



然后新徏一个实现类d现接?/span>

package com.xfire.core.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.xfire.core.entity.UserInfo;
import com.xfire.core.service.IUserInfoService;

/**
 *@author jilongliang
 *@Date 2012-2-29
 */
public class UserInfoServiceImpl implements IUserInfoService {

private int requestCount = 0;

public List<UserInfo> getAddressList() {
requestCount++;
System.out.println("requestCount" + requestCount);
List<UserInfo> listAdd = new ArrayList<UserInfo>();
UserInfo address = new UserInfo();
address.setIdentifier(1);
address.setCountry("中國");
address.setProivice("廣東?);
address.setCity("陽江");
address.setAddress("廣東陽春");
address.setPostCode("1111111");
address.setExist(false);
address.setArrary(new String[] { "22", "23", "24" });
listAdd.add(address);

address.setIdentifier(2);
address.setCountry("中國");
address.setProivice("廣東?);
address.setCity("陽江");
address.setAddress("廣東陽春");
address.setPostCode("1111111");
address.setExist(false);
address.setArrary(new String[] { "a", "b", "c" });
listAdd.add(address);

return listAdd;
}

/**
 * 
 * @param list
 * @return
 */
public List<UserInfo> setAddresses(List<UserInfo> list) {
requestCount++;
System.out.println("requestCount" + requestCount);
return list;
}

}



-----客户?/span>

package com.xfire.core.client;

import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

import com.xfire.core.entity.UserInfo;
import com.xfire.core.service.IUserInfoService;

/**
 *@author jilongliang
 *@Date 2012-3-5
 * 
 */
public class UserInfoClient {

public static void main(String[] args) {
getServiceList();
setServiceList();
}

static String url = "http://localhost:8081/xfire/services/UserInfo";

/**
 * 
 */
public static void getServiceList() {
Service service = new ObjectServiceFactory()
.create(IUserInfoService.class);

try {
IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory()
.create(service, url);
List<UserInfo> list = (ArrayList<UserInfo>) iAddressService
.getAddressList();

System.out.println("一共多条数据Q? + list.size());

for (Iterator<UserInfo> iter = list.iterator(); iter.hasNext();) {

UserInfo a = iter.next();

System.out.println(a);
}

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

public static void setServiceList() {
Service service = new ObjectServiceFactory()
.create(IUserInfoService.class);

try {
IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory()
.create(service, url);

List<UserInfo> listAdd = new ArrayList<UserInfo>();
UserInfo address = new UserInfo();
address.setIdentifier(1);
address.setCountry("中國");
address.setProivice("廣東?);
address.setCity("陽江");
address.setAddress("廣東陽春");
address.setPostCode("1111111");
address.setExist(false);
address.setArrary(new String[] { "22", "23", "24" });
listAdd.add(address);

address.setIdentifier(2);
address.setCountry("中國");
address.setProivice("廣東?);
address.setCity("陽江");
address.setAddress("廣東陽春");
address.setPostCode("1111111");
address.setExist(false);
address.setArrary(new String[] { "a", "b", "c" });
listAdd.add(address);

List<UserInfo> returnAdd = iAddressService.setAddresses(listAdd);

System.out.println("L:" + returnAdd);

for (Iterator<UserInfo> it = returnAdd.iterator(); it.hasNext();) {
UserInfo address2 = it.next();

System.out.println(address2);
}

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

}
}


图解----

 




 

 

 

 

 

 

 

 

 

 

 

 

子书下蝲http://download.csdn.net/detail/l_ji_l/4116804

源代码下载:http://download.csdn.net/detail/l_ji_l/4116788



zhb8015 2012-05-15 17:42 发表评论
]]>
java.lang.IllegalStateException: Could not find valid implementation for: 2.0http://www.tkk7.com/zhb8015/articles/377905.htmlzhb8015zhb8015Fri, 11 May 2012 06:42:00 GMThttp://www.tkk7.com/zhb8015/articles/377905.htmlhttp://www.tkk7.com/zhb8015/comments/377905.htmlhttp://www.tkk7.com/zhb8015/articles/377905.html#Feedback0http://www.tkk7.com/zhb8015/comments/commentRss/377905.htmlhttp://www.tkk7.com/zhb8015/services/trackbacks/377905.htmlmyeclipse6.5,xfire1.2.6开发webservice报错Q?/pre>
报错原因Qxfire自带spring-1.2.6.jar 与spring.jar版本冲突Q删除一个即?
 
 
java.lang.IllegalStateException: Could not find valid implementation for: 2.0
	org.apache.xbean.spring.context.impl.XBeanHelper.createBeanDefinitionReader(XBeanHelper.java:48)
	org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:74)
	org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)
	org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)
	javax.servlet.GenericServlet.init(GenericServlet.java:212)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Thread.java:662)

 

root cause

java.lang.reflect.InvocationTargetException
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	org.apache.xbean.spring.context.impl.XBeanHelper.createBeanDefinitionReader(XBeanHelper.java:46)
	org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:74)
	org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)
	org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)
	javax.servlet.GenericServlet.init(GenericServlet.java:212)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Thread.java:662)

 

root cause

java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlBeanDefinitionReader.setValidationMode(I)V
	org.apache.xbean.spring.context.v2.XBeanXmlBeanDefinitionReader.<init>(XBeanXmlBeanDefinitionReader.java:58)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	org.apache.xbean.spring.context.impl.XBeanHelper.createBeanDefinitionReader(XBeanHelper.java:46)
	org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:74)
	org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)
	org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)
	javax.servlet.GenericServlet.init(GenericServlet.java:212)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Thread.java:662)


zhb8015 2012-05-11 14:42 发表评论
]]>
理解AXIOMhttp://www.tkk7.com/zhb8015/articles/377311.htmlzhb8015zhb8015Thu, 03 May 2012 10:16:00 GMThttp://www.tkk7.com/zhb8015/articles/377311.htmlhttp://www.tkk7.com/zhb8015/comments/377311.htmlhttp://www.tkk7.com/zhb8015/articles/377311.html#Feedback0http://www.tkk7.com/zhb8015/comments/commentRss/377311.htmlhttp://www.tkk7.com/zhb8015/services/trackbacks/377311.html
  AXIOM q不是另一U对象模型。它有着明确的设计目标:大幅提升 Apache 下一?SOAP 协议?Axis 2 的性能。结果造就了不同于其他对象模型?AXIOMQ也UCؓ OMQ,因ؓ它突Z构造的dQƈ?仅当需要的时候才建立。由于是d的,它尽可能地减dpȝ资源的压力,特别?CPU 和内存。同Ӟ延迟构造又允许在其他部分还没有完成的时候用树的一部分。AXIOM 强大的gq构力源于底层的 Streaming API for XML (StAX) 解析器。AXIOM 提供了所有这些特性,同时q后的复杂性对用户是透明的?
  使用 XMLBench Document Model Benchmark 试的结果表明,AXIOM 的性能和现有的高性能对象模型相当。但?AXIOM 的内存占用要好于现有多数依靠 SAX ??DOM 输入输出的对象模型。因此对?Web 服务引擎或内存受限制讑֤q样?XML 处理器,AXIOM 是一U理想的选择Q它可用?
  一般的 XML 处理Q但是有一个对 SOAP 优化了的可选层?

zhb8015 2012-05-03 18:16 发表评论
]]>
axis2教程Q{Q?/title><link>http://www.tkk7.com/zhb8015/articles/377301.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Thu, 03 May 2012 09:07:00 GMT</pubDate><guid>http://www.tkk7.com/zhb8015/articles/377301.html</guid><wfw:comment>http://www.tkk7.com/zhb8015/comments/377301.html</wfw:comment><comments>http://www.tkk7.com/zhb8015/articles/377301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zhb8015/comments/commentRss/377301.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhb8015/services/trackbacks/377301.html</trackback:ping><description><![CDATA[<div id="vf55f5l" class="blog_title"> <h3><a >Axis2 教程</a> </h3> <h3><em class="actions"></em>(<a >http://zxs19861202.iteye.com/blog/630359</a></h3> <h3><a >http://zxs19861202.iteye.com/blog/635903</a>   手工打包)</h3> <h3><a >WebService</a><a >Tomcat</a><a >Apache</a><a >览?/a><a >Web</a></h3></div> <div class="v35z5j5" id="blog_content" class="blog_content"> <p>  Axis2<span>是一套崭新的</span>WebService<span>引擎Q该版本是对</span>Axis1.x<span>重新设计的物?/span>Axis2<span>不仅支持</span>SOAP1.1<span>?/span>SOAP1.2<span>Q还集成了非常流行的</span>REST WebService<span>Q同时还支持</span>Spring<span>?/span>JSON<span>{技术。这些都在后面的系列教E中讲解。在本文中主要介l了如何使用</span>Axis2<span>开发一个不需要Q何配|文件的</span>WebService<span>Qƈ在客L使用</span>Java<span>?/span>C#<span>调用q个</span>WebService<span>?/span></p> <p><strong><span>一?/span>Axis2</strong><strong><span>的下载和安装</span></strong></p> <p>    <span>读者可以从如下的网址下蝲</span>Axis2<span>的最新版本:</span></p> <p>    <a >http://ws.apache.org/axis2/</a></p> <p>    <span>在本文用了目前</span>Axis2<span>的最新版?/span>1.4.1<span>。读者可以下载如下两?/span>zip<span>包:</span></p> <p>    axis2-1.4.1-bin.zip</p> <p>    axis2-1.4.1-war.zip</p> <p>    <span>其中</span>axis2-1.4.1-bin.zip<span>文g中包含了</span>Axis2<span>中所有的</span>jar<span>文g</span>, axis2-1.4.1-war.zip<span>文g用于?/span>WebService<span>发布?/span>Web<span>容器中?/span></p> <p>    <span>?/span>axis2-1.4.1-war.zip<span>文g解压到相应的目录Q将目录中的</span>axis2.war<span>文g攑ֈ</span><Tomcat<span>安装目录</span>>\webapps<span>目录中(本文使用?/span>Tomcat<span>的版本是</span>6.x<span>Q,q启?/span>Tomcat<span>?/span></p> <p>    <span>在浏览器地址栏中输入如下?/span>URL<span>Q?/span></p> <p>    <a href="http://localhost:8080/axis2/">http://localhost:8080/axis2/</a></p> <p>    <span>如果在浏览器中显C出如图</span>1<span>所C的面Q则表示</span>Axis2<span>安装成功?br /></span></p> <div><br /><br />?</div> <div><br /><img class="magplus" title="点击查看原始大小囄" alt="" src="http://dl.iteye.com/upload/attachment/228189/8361c97d-ea79-3b16-aaed-f6dba647ddf9.jpg" width="700" height="405" /><br /> <br /></div> <p><strong><span>二、编写和发布WebService</span></strong></p> <p>  <span>对于?/span>Java<span>实现的服务程序给人的印象是需要进行大量的配置Q不q这一点在</span>Axis2<span>中将被终l。在</span>Axis2<span>中不需要进行Q何的配置Q就可以直接一个简单的</span>POJO<span>发布?/span>WebService<span>。其?/span>POJO<span>中所有的</span>public<span>Ҏ被发布?/span>WebService<span>Ҏ?/span></p> <p>    <span>下面我们来实C个简单的</span>POJO<span>Q代码如下:</span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> SimpleService<br />{<br />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> String getGreeting(String name)<br />    {<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">你好 </span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> name;<br />    }    <br />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> getPrice()<br />    {<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> java.util.Random().nextInt(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br />    }    <br />}<br /></span></div> <p> </p> <p>    <span>?/span>SimpleService<span>cM有两个方法,׃q两个方法都?/span>public<span>ҎQ因此,它们都将作ؓ</span>WebService<span>Ҏ被发布?/span></p> <p>    <span>~译</span>SimpleService<span>cdQ将</span>SimpleService.class<span>文g攑ֈ</span><Tomcat<span>安装目录</span>>\webapps\axis2\WEB-INF\pojo<span>目录中(如果没有</span>pojo<span>目录Q则建立该目录)。现在我们已l成功将</span>SimpleService<span>cd布成?/span>WebService<span>。在览器地址栏中输入如下?/span>URL<span>Q?/span></p> <p><a href="http://localhost:8080/axis2/services/listServices">http://localhost:8080/axis2/services/listServices</a></p> <p>    <span>q时当前面显C所有在</span>Axis2<span>中发布的</span>WebService<span>Q如?/span>2<span>所C?br /></span></p> <p> </p> <p>    <span>在浏览器地址栏中输入如下的两?/span>URL<span>来分别测?/span>getGreeting<span>?/span>getPrice<span>ҎQ?/span></p> <p><a href="http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill">http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill</a></p> <p><a href="http://localhost:8080/axis2/services/SimpleService/getPrice">http://localhost:8080/axis2/services/SimpleService/getPrice</a><br /><br />    <span>?/span>3<span>和图</span>4<span>分别昄?/span>getGreeting<span>?/span>getPrice<span>Ҏ的测试结果?br /></span></p> <p> </p> <p><span>?  getGreetingҎ的测试结?/span></p> <p><span><br /><img alt="" src="http://dl.iteye.com/upload/attachment/228193/d266b21e-4f1b-3413-997d-f1192eb0b5b5.jpg" /><br /> </span></p> <p> </p> <p> </p> <p><span>?  getPriceҎ的测试结?/span></p> <p><span><br /><img alt="" src="http://dl.iteye.com/upload/attachment/228195/f462cbcc-efa0-3cfa-a9de-9a13614c8c2f.jpg" /><br /> </span></p> <p> </p> <p>    <span>在编写、发布和试</span>0<span>配置?/span>WebService<span>时应注意如下几点Q?/span></p> <p><span>    </span>1. POJO<span>cM能?/span>package<span>关键字声明包?/span></p> <p><span>    </span>2. Axis2<span>在默认情况下可以热发?/span>WebService<span>Q也是_?/span>WebService<span>?/span>.class<span>文g复制?/span>pojo<span>目录中时Q?/span>Tomcat<span>不需要重新启动就可以自动发布</span>WebService<span>。如果想取消</span>Axis2<span>的热发布功能Q可以打开</span><Tomcat<span>安装目录</span>>\webapps\axis2\WEB-INF\conf\axis2.xml<span>Q找到如下的配置代码Q?/span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff"><</span><span style="color: #800000">parameter </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="hotdeployment"</span><span style="color: #0000ff">></span><span style="color: #000000">true</span><span style="color: #0000ff"></</span><span style="color: #800000">parameter</span><span style="color: #0000ff">></span> </div> <p> </p> <p> </p> <p> </p> <p>    <span>?/span>true<span>改ؓ</span>false<span>卛_。要注意的是Q?/span>Axis2<span>在默认情况下虽然是热发布Q但q不是热更新Q也是_一旦成功发布了</span>WebService<span>Q再x新该</span>WebService<span>Q就必须重启</span>Tomcat<span>。这对于开发h员调?/span>WebService<span>非常不方便,因此Q在开?/span>WebService<span>Ӟ可以?/span>Axis2<span>设ؓ热更新。在</span>axis2.xml<span>文g中找?/span><span><parameter name="hotupdate">false</parameter></span><span>Q将</span>false<span>改ؓ</span>true<span>卛_?/span></p> <p><span>    </span>3. <span>在浏览器中测?/span>WebService<span>Ӟ如果</span>WebService<span>Ҏ有参敎ͼ需要?/span>URL<span>的请求参数来指定?/span>WebService<span>Ҏ参数的|h参数名与Ҏ参数名要一_例如Q要试</span>getGreeting<span>ҎQ请求参数名应ؓ</span>name<span>Q如上面?/span>URL<span>所C?/span></p> <p><span>    </span>4. <span>发布</span>WebService<span>?/span>pojo<span>目录只是默认的,如果读者想在其他的目录发布</span>WebService<span>Q可以打开</span>axis2.xml<span>文gQƈ?/span><axisconfig><span>元素中添加如下的子元素:</span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000"> </span><span style="color: #0000ff"><</span><span style="color: #800000">deployer </span><span style="color: #ff0000">extension</span><span style="color: #0000ff">=".class"</span><span style="color: #ff0000"> directory</span><span style="color: #0000ff">="my"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="org.apache.axis2.deployment.POJODeployer"</span><span style="color: #0000ff">/></span> </div> <p> </p> <p> </p> <p> </p> <p>    <span>上面的配|允许在</span><Tomcat<span>安装目录</span>>\webapps\axis2\WEB-INF\my<span>目录中发?/span>WebService<span>。例如,本例中?/span>SimpleService.class<span>复制?/span>my<span>目录中也可以成功发布Q但要删?/span>pojo<span>目录中的</span>SimpleService.class<span>Q否?/span>WebService<span>会重名)?/span></p> <p> </p> <p><strong><span>三?/span> </strong><strong><span>?/span>Java</strong><strong><span>实现调用</span>WebService</strong><strong><span>的客LE序</span></strong></p> <p>    WebService<span>是ؓE序服务的,只在览器中讉K</span>WebService<span>是没有意义的。因此,在本节?/span>Java<span>实现了一个控制台E序来调用上一节发布的</span>WebService<span>。调?/span>WebService<span>的客L代码如下Q?/span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">package</span><span style="color: #000000"> client;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.xml.namespace.QName;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.axis2.addressing.EndpointReference;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.axis2.client.Options;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.axis2.rpc.client.RPCServiceClient;<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> RPCClient<br />{<br />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception  <br />    {<br />        </span><span style="color: #008000">//</span><span style="color: #008000">  使用RPC方式调用WebService        </span><span style="color: #008000"><br /></span><span style="color: #000000">        RPCServiceClient serviceClient </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> RPCServiceClient();<br />        Options options </span><span style="color: #000000">=</span><span style="color: #000000"> serviceClient.getOptions();<br />        </span><span style="color: #008000">//</span><span style="color: #008000">  指定调用WebService的URL</span><span style="color: #008000"><br /></span><span style="color: #000000">        EndpointReference targetEPR </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> EndpointReference(<br />                </span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/axis2/services/SimpleService</span><span style="color: #000000">"</span><span style="color: #000000">);<br />        options.setTo(targetEPR);<br />        </span><span style="color: #008000">//</span><span style="color: #008000">  指定getGreetingҎ的参数?/span><span style="color: #008000"><br /></span><span style="color: #000000">        Object[] opAddEntryArgs </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Object[] {</span><span style="color: #000000">"</span><span style="color: #000000">h</span><span style="color: #000000">"</span><span style="color: #000000">};<br />        </span><span style="color: #008000">//</span><span style="color: #008000">  指定getGreetingҎq回值的数据cd的Class对象</span><span style="color: #008000"><br /></span><span style="color: #000000">        Class[] classes </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Class[] {String.</span><span style="color: #0000ff">class</span><span style="color: #000000">};<br />        </span><span style="color: #008000">//</span><span style="color: #008000">  指定要调用的getGreetingҎ及WSDL文g的命名空?/span><span style="color: #008000"><br /></span><span style="color: #000000">        QName opAddEntry </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> QName(</span><span style="color: #000000">"</span><span style="color: #000000">http://ws.apache.org/axis2</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">getGreeting</span><span style="color: #000000">"</span><span style="color: #000000">);<br />        </span><span style="color: #008000">//</span><span style="color: #008000">  调用getGreetingҎq输Ҏ的返回?/span><span style="color: #008000"><br /></span><span style="color: #000000">        System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[</span><span style="color: #000000">0</span><span style="color: #000000">]);<br />        </span><span style="color: #008000">//</span><span style="color: #008000">  下面是调用getPriceҎ的代码,q些代码与调用getGreetingҎ的代码类?/span><span style="color: #008000"><br /></span><span style="color: #000000">        classes </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Class[] {</span><span style="color: #0000ff">int</span><span style="color: #000000">.</span><span style="color: #0000ff">class</span><span style="color: #000000">};<br />        opAddEntry </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> QName(</span><span style="color: #000000">"</span><span style="color: #000000">http://ws.apache.org/axis2</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">getPrice</span><span style="color: #000000">"</span><span style="color: #000000">);<br />        System.out.println(serviceClient.invokeBlocking(opAddEntry, </span><span style="color: #0000ff">new</span><span style="color: #000000"> Object[]{}, classes)[</span><span style="color: #000000">0</span><span style="color: #000000">]);<br />    } <br />}<br /></span></div> <p> </p> <p> </p> <p> </p> <p> </p> <p><span>q行上面的程序后Q将在控制台输出如下的信息:</span></p> <p> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">你好 h<br />443</span> </div> <p>    <span>在编写客L代码时应注意如下几点Q?/span></p> <p><span>    </span>1. <span>客户端代码需要引用很?/span>Axis2<span>?/span>jar<span>包,如果读者不太清楚要引用哪个</span>jar<span>包,可以?/span>Eclipse<span>的工E中引用</span>Axis2<span>发行包的</span>lib<span>目录中的所?/span>jar<span>包?/span></p> <p><span>    </span>2. <span>在本例中使用?/span>RPCServiceClient<span>cȝ</span>invokeBlocking<span>Ҏ调用?/span>WebService<span>中的Ҏ?/span>invokeBlocking<span>Ҏ有三个参敎ͼ其中W一个参数的cd?/span>QName<span>对象Q表C调用的方法名Q第二个参数表示要调用的</span>WebService<span>Ҏ的参数|参数cd?/span>Object[]<span>Q第三个参数表示</span>WebService<span>Ҏ的返回值类型的</span>Class<span>对象Q参数类型ؓ</span>Class[]<span>。当Ҏ没有参数Ӟ</span>invokeBlocking<span>Ҏ的第二个参数g能是</span>null<span>Q而要使用</span>new Object[]{}<span>?/span></p> <p><span>    </span>3. <span>如果被调用的</span>WebService<span>Ҏ没有q回|应?/span>RPCServiceClient<span>cȝ</span>invokeRobust<span>ҎQ该Ҏ只有两个参数Q它们的含义?/span>invokeBlocking<span>Ҏ的前两个参数的含义相同?/span></p> <p><span>    </span>4. <span>在创?/span>QName<span>对象Ӟ</span>QName<span>cȝ构造方法的W一个参数表C?/span>WSDL<span>文g的命名空间名Q也是</span><wsdl:definitions><span>元素?/span>targetNamespace<span>属性|下面?/span>SimpleService<span>cȝ成的</span>WSDL<span>文g的代码片D:<br /><br /></span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff"><?</span><span style="color: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000ff">?></span><span style="color: #000000"><br /></span><span style="color: #0000ff"><</span><span style="color: #800000">wsdl:definitions </span><span style="color: #ff0000">xmlns:wsdl</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/"</span><span style="color: #ff0000"> xmlns:ns1</span><span style="color: #0000ff">="http://org.apache.axis2/xsd"</span><span style="color: #ff0000"> <br />xmlns:ns</span><span style="color: #0000ff">="http://ws.apache.org/axis2"</span><span style="color: #ff0000"> xmlns:wsaw</span><span style="color: #0000ff">="http://www.w3.org/2006/05/addressing/wsdl"</span><span style="color: #ff0000"> <br />xmlns:http</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/http/"</span><span style="color: #ff0000"> xmlns:xs</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema"</span><span style="color: #ff0000"> <br />xmlns:mime</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/mime/"</span><span style="color: #ff0000"> xmlns:soap</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/soap/"</span><span style="color: #ff0000"> <br />xmlns:soap12</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/soap12/"</span><strong><span style="color: #ff0000"> <br />targetNamespace</span><span style="color: #0000ff">="http://ws.apache.org/axis2"</span></strong><span style="color: #0000ff">></span><span style="color: #000000"><br />    </span><span style="color: #0000ff"><</span><span style="color: #800000">wsdl:types</span><span style="color: #0000ff">></span><span style="color: #000000"><br />        <img alt="" src="http://www.tkk7.com/Images/dot.gif" /> <img alt="" src="http://www.tkk7.com/Images/dot.gif" /><br />    </span><span style="color: #0000ff"></</span><span style="color: #800000">wsdl:types</span><span style="color: #0000ff">></span><span style="color: #000000"><br />    <img alt="" src="http://www.tkk7.com/Images/dot.gif" /> <img alt="" src="http://www.tkk7.com/Images/dot.gif" /><br /></span><span style="color: #0000ff"></</span><span style="color: #800000">wsdl:definitions</span><span style="color: #0000ff">></span><span style="color: #000000"><br /></span></div> <p> </p> <p><strong><span>四、用</span>wsdl2java</strong><strong><span>化客L的编?/span></strong></p> <p>    <span>也许有很多读者会?#8220;有没有搞错啊Q只调用两个</span>WebService<span>Ҏ用要写这么多代码Q太ȝ?#8221;?/span></p> <p>    <span>不过q好</span>Axis2<span>提供了一?/span>wsdl2java.bat<span>命o可以Ҏ</span>WSDL<span>文g自动产生调用</span>WebService<span>的代码?/span>wsdl2java.bat<span>命o可以?/span><Axis2<span>安装目录</span>>"bin<span>目录中找到。在使用</span>wsdl2java.bat<span>命o之前需要设|?/span>AXIS2_HOME<span>环境变量Q该变量值是</span><Axis2<span>安装目录</span>><span>?/span></p> <p>    <span>?/span>Windows<span>控制台输出如下的命o行来生成调用</span>WebService<span>的代码:</span></p> <p><span>%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o stub</span></p> <p>    <span>其中</span>-url<span>参数指定?/span>wsdl<span>文g的\径,可以是本地\径,也可以是|络路径?/span>-p<span>参数指定了生成的</span>Java<span>cȝ包名Q?/span>-o<span>参数指定了生成的一pd文g保存的根目录。在执行完上面的命o后,读者就会发现在当前目录下多了个</span>stub<span>目录Q在</span>."stub"src"client<span>目录可以扑ֈ一?/span>SimpleServiceStub.java<span>文gQ该文g复杂调用</span>WebService<span>Q读者可以在E序中直接用这个类Q代码如下:<br /></span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">package</span><span style="color: #000000"> client;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.xml.namespace.QName;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.axis2.addressing.EndpointReference;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.axis2.client.Options;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.axis2.rpc.client.RPCServiceClient;<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> StubClient<br />{<br />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception  <br />    {<br />        SimpleServiceStub stub </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> SimpleServiceStub();<br />        SimpleServiceStub.GetGreeting gg </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> SimpleServiceStub.GetGreeting();<br />        gg.setName(</span><span style="color: #000000">"</span><span style="color: #000000">比尔</span><span style="color: #000000">"</span><span style="color: #000000">);<br />        System.out.println( stub.getGreeting(gg).get_return());<br />        System.out.println(stub.getPrice().get_return());<br />    } <br />}<br /></span></div> <p> </p> <p> </p> <p>    <span>上面的代码大大简化了调用</span>WebService<span>的步骤,q代码更加z。但要注意的是,</span>wsdl2java.bat<span>命o生成?/span>Stub<span>cd</span>WebService<span>Ҏ的参数都装在了相应的类中,cd为方法名Q例如,</span>getGreeting<span>Ҏ的参数都装在了</span>GetGreeting<span>cMQ要惌?/span>getGreeting<span>ҎQ必d创徏</span>GetGreeting<span>cȝ对象实例?/span></p> <p><strong><span>五、?/span>C#</strong><strong><span>调用</span>WebService</strong></p> <p>    <span>从理Z_</span>WebService<span>可以被Q何支?/span>SOAP<span>协议的语a调用。在</span>Visual Studio<span>中?/span>C#<span>调用</span>WebService<span>是在所有语a中最Ҏ实现的(</span>VB.net<span>的调用方法类|也同样很单)?/span></p> <p>    <span>新徏一?/span>Visual Studio<span>工程Qƈ在引?/span>Web<span>服务的对话框中输入如下的</span>URL<span>Qƈ输入</span>Web<span>引用名ؓ“</span>WebService<span>”Q?/span></p> <p>    <a href="http://localhost:8080/axis2/services/SimpleService?wsdl">http://localhost:8080/axis2/services/SimpleService?wsdl</a></p> <p>    <span>然后引用</span>Web<span>服务的对话框׃昄?/span>WebService<span>中的所有的ҎQ如?/span>5<span>所C?br /></span></p> <p> </p> <p> </p> <p>    <span>在完成上面的工作后,只需要如下三?/span>C#<span>代码可以调?/span>getGreeting<span>?/span>getPrice<span>ҎQƈ昄q两个方法的q回|</span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">WebService.SimpleService simpleService </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> WSC.WebService.SimpleService();<br />MessageBox.Show( simpleService.getGreeting(</span><span style="color: #000000">"</span><span style="color: #000000">比尔</span><span style="color: #000000">"</span><span style="color: #000000">));<br />MessageBox.Show(simpleService.getPrice().@return.ToString());</span> </div> <p> </p> <p> </p> <p> </p> <p>    <span>?/span>.net<span>解析</span>WSDL<span>文g时直接将</span>getGreeting<span>Ҏ的参数映ؓ</span>String<span>cdQ因此,可以直接q行传倹{?/span><br />    <span>从上面的调用q程可以看出Q添?/span>Web<span>引用的过E就相当于在</span>Java<span>中调?/span>wsdl2java.bat<span>自动生成</span>stub<span>cȝq程。只是在调用</span>stub<span>cL?/span>C#<span>有一定的区别Q但从M上来_都大大简化了调用</span>WebService<span>的过E?/span></p> <div><br /><br />?</div> <div><br /><img class="magplus" title="点击查看原始大小囄" alt="" src="http://dl.iteye.com/upload/attachment/228197/b684beb5-3e6f-3494-a479-d9ff4d1ca3f1.jpg" width="700" height="434" /><br /> <br /></div> <div><br /><span><br />?</span> </div> <div><br /><img class="magplus" title="点击查看原始大小囄" alt="" src="http://dl.iteye.com/upload/attachment/228191/b28de9a2-c8e0-341d-93e0-75c7e852930f.jpg" width="700" height="405" /><br /> <br /></div></div><img src ="http://www.tkk7.com/zhb8015/aggbug/377301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhb8015/" target="_blank">zhb8015</a> 2012-05-03 17:07 <a href="http://www.tkk7.com/zhb8015/articles/377301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis2插g安装http://www.tkk7.com/zhb8015/articles/377280.htmlzhb8015zhb8015Thu, 03 May 2012 07:25:00 GMThttp://www.tkk7.com/zhb8015/articles/377280.htmlhttp://www.tkk7.com/zhb8015/comments/377280.htmlhttp://www.tkk7.com/zhb8015/articles/377280.html#Feedback0http://www.tkk7.com/zhb8015/comments/commentRss/377280.htmlhttp://www.tkk7.com/zhb8015/services/trackbacks/377280.html
Axis2_Codegen_Wizard_1.3.0
Axis2_Service_Archiver_1.3.0

zhb8015 2012-05-03 15:25 发表评论
]]>
XFire 学习http://www.tkk7.com/zhb8015/articles/373409.htmlzhb8015zhb8015Thu, 05 Apr 2012 14:10:00 GMThttp://www.tkk7.com/zhb8015/articles/373409.htmlhttp://www.tkk7.com/zhb8015/comments/373409.htmlhttp://www.tkk7.com/zhb8015/articles/373409.html#Feedback0http://www.tkk7.com/zhb8015/comments/commentRss/373409.htmlhttp://www.tkk7.com/zhb8015/services/trackbacks/373409.html
http://www.tkk7.com/fastzch/archive/2008/08/28/225439.html
http://www.tkk7.com/waterye/archive/2005/12/05/22643.html
http://xfire.codehaus.org/JSR+181+Annotations
http://blog.csdn.net/hlf48641715/article/details/3220542
http://www.ibm.com/developerworks/cn/java/j-ws/#JAVAZA45

http://blog.csdn.net/shazhenhua/article/details/3186726
<interface_name>.aegis.xml-->
<mappings>
    
<mapping>
        
<method name="test">
            
<parameter index="0" componentType="java.lang.String" />
            
<return-type componentType="org.vivianj.xfire.pojo.Course" />
        
</method>
    
</mapping>
</mappings>

problem:
http://yuyuqian521.iteye.com/blog/939047

PSQ?br />1、IHelloService.aegis.xml 应与interface攑֜同一包下Q否则报错:
1 Cannot create mapping for java.util.List, unspecified component type for parameter 0 of method test in interface org.vivianj.xfire.service.IHelloService
2     org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:370)
2、services.xml应放在classes 中,目录l构META-INF-xfire-services.xml

zhb8015 2012-04-05 22:10 发表评论
]]>
վ֩ģ壺 ٸ̫ˬ߹ۿƵ| ѴƬavֻƬ| ݺݺݰƵ| Ƶһ| ޹˾þ99Ʒ| ѳ˼Ƶ| С˵ͼƬƵ| ҰĻƵ| ASS츾ëPICS| ߹ۿѲ| 㽶þһ| 100018Ƶ | avۺɫ| þþƷѿ| ޹ƷԲĵӰ| ĻѸƵ| Ƶ߹ۿ| պaa߿| ˾ҹƵѹ| ޹˳ɾƷ| һƬѿ| ˳ձ߹ۿ| penƵѹۿ| ߳Ķ | ߹ۿƵ | ŷ޹Ʒþ| ߲ѲavƬ| þù| þۺɫHEZYO | Ļ| þҹ³Ƭ| һһ| AëƬ߲Ųշ| ߹͵Ʒѿ | Ļav| Ƭ91Ʒѿ3 | hƵѸ߹ۿ| ޺Ļ| ĻӰԺѲ| Ѹ| ޾ƷִִˬAƬ|