??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品久久久久婷婷老年 ,久久国产精品一区二区,在线精品国产亚洲http://www.aygfsteel.com/ashutc/category/42987.htmlj2eezh-cnSun, 06 Dec 2009 10:29:41 GMTSun, 06 Dec 2009 10:29:41 GMT60利用CXF框架开发WebService(?http://www.aygfsteel.com/ashutc/archive/2009/11/24/303521.html西瓜西瓜Tue, 24 Nov 2009 13:20:00 GMThttp://www.aygfsteel.com/ashutc/archive/2009/11/24/303521.htmlhttp://www.aygfsteel.com/ashutc/comments/303521.htmlhttp://www.aygfsteel.com/ashutc/archive/2009/11/24/303521.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/303521.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/303521.html开发工PMyEclipse 6.0

开发环境:

1.     jdk1.5

2.     CXF框架Q版?span style="font-family: Helvetica; color: black; font-size: 14pt;">apache-cxf-2.2.3.zipQ到http://cxf.apache.org/download.html下蝲

注:如?span style="color: red;">jdk1.6q行开发,需下蝲jaxb-api.jar?span style="color: red;">jaxws-api.jarQ然后在本机安装JDK的地方,?span style="color: red;">jdk1.6.0?span style="color: red;">jre文g夹下?span style="color: red;">lib文g夹中新徏endorsed文g夹,攑օ以上两个jar包才可以q行开?/strong>?/span>

W一步,先在MyEclipse新徏一?/strong>java目Q项目名?/strong>HelloWebService?/span>

W二步,在项目中引入apache-cxf-2.2.3.zip?/strong>lib下的所?/strong>jar包?/strong>

W三步,~写试用接口以及其实现c:

 

接口Q?/span>

 

 

Java代码
  1. package test;  
  2.   
  3. import javax.jws.WebService;  
  4.   
  5. public interface Hello {  
  6.       
  7.     public String sayHello(String str);  
  8.   
  9. }  

实现c:

 

Java代码
  1. package test;  
  2.   
  3. public class HelloImpl implements Hello {  
  4.   
  5.     public String sayHello(String str) {  
  6.           
  7.         System.out.println("调用成功");  
  8.         return "Hello " + str;  
  9.     }  
  10.   
  11. }  

 

在接口中dWebService的注解,其标注?span style="font-size: 14pt;">WebService的服务接口?/p>

 

 

Java代码
  1. @WebService  
  2. public interface Hello {  

W四步,~写WebService的服务器端?/strong>

Java代码
  1. package test;  
  2.   
  3. import org.apache.cxf.endpoint.Server;  
  4. import org.apache.cxf.jaxws.JaxWsServerFactoryBean;  
  5.   
  6. public class MainServer {  
  7.       
  8.     public static void main(String[] args) {  
  9.         JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();  
  10.         factory.setAddress("http://localhost:8080/HelloWebService");  
  11.         factory.setServiceClass(HelloImpl.class);  
  12.         Server server = factory.create();  
  13.         server.start();  
  14.     }  
  15. }  

factory.setAddress("http://localhost:8080/HelloWebService");

讄服务在服务器上部|的位置

 

factory.setServiceClass(HelloImpl.class);

讄服务暴露的接口实现类

 

完成之后q行MainServer中的mainҎ?/p>

 

注:因ؓCXF框架中有Jetty 6 服务器,所以这个的demo发布在其中运行?/p>

 

之后打开览器,输入Q?/p>

http://localhost:8080/HelloWebService?wsdl

如能看见以下画面?span style="font-size: 14pt;">WebService发布成功Q?/p>

 

Xml代码
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. - <wsdl:definitions name="HelloImplService" targetNamespace="http://test/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://test/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  3. - <wsdl:types>  
  4. - <xs:schema elementFormDefault="unqualified" targetNamespace="http://test/" version="1.0" xmlns:tns="http://test/" xmlns:xs="http://www.w3.org/2001/XMLSchema">  
  5.   <xs:element name="sayHello" type="tns:sayHello" />   
  6.   <xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />   
  7. - <xs:complexType name="sayHello">  
  8. - <xs:sequence>  
  9.   <xs:element minOccurs="0" name="arg0" type="xs:string" />   
  10.   </xs:sequence>  

W五步,~写客户?/strong>

Java代码
  1. package test;  
  2.   
  3. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  
  4.   
  5. public class Client {  
  6.     public static void main(String[] args) {  
  7.         JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
  8.         factory.setServiceClass(Hello.class);  
  9.         factory.setAddress("http://localhost:8080/HelloWebService");  
  10.         Hello hello = (Hello)factory.create();  
  11.           
  12.         System.out.println(hello.sayHello("weberyb"));  
  13.     }  
  14.   
  15. }  

 

factory.setServiceClass(Hello.class);

讄讉K服务器端的指定接口?/p>

 

factory.setAddress("http://localhost:8080/HelloWebService");

讄讉K的服务的地址?/p>

 

factory.create()

创徏代理对象以供q程调用

 

之后q行Client?span style="font-size: 14pt;">mainҎQ可以在控制台的服务器端看见如下输出Q?/p>

Java代码
  1. ....................  
  2. 2009-8-13 14:00:42 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass  
  3. 信息: Creating Service {http://test/}HelloService from class test.Hello  
  4. Hello weberyb  

 

说明客户端调?span style="font-size: 14pt;">WebService成功?/p> xQ这个简单的WebService开发完?br /> 试qjdk1.6   它的包会变成import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; q且没有factory.setAddressq个Ҏ 采用自带的例子进行测?会出现参数null错误Q但是客L调用服务器端都调用成功,可能原因是没有加载那两个JAR文g的问题,暂时没有试



西瓜 2009-11-24 21:20 发表评论
]]>
ZTomcat5.0和Axis2开发Web Service应用实例(?http://www.aygfsteel.com/ashutc/archive/2009/11/23/303385.html西瓜西瓜Mon, 23 Nov 2009 13:37:00 GMThttp://www.aygfsteel.com/ashutc/archive/2009/11/23/303385.htmlhttp://www.aygfsteel.com/ashutc/comments/303385.htmlhttp://www.aygfsteel.com/ashutc/archive/2009/11/23/303385.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/303385.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/303385.html原帖出处Qhttp://zhangjunhd.blog.51cto.com/113473/23692

本文介l如何?/span>Tomcat5.0?/span>Apache Axis2开发、部|及试一个简单的Web Service应用?/span>
1Q?/span>工作环境
Eclipse 3.1.2+Lomboz+jdk1.5+ apache-tomcat-5.0.18+AXIS2:1.0(war版本?/span>bin版本)
?/span>[url]http://ws.apache.org/axis2/download/1_0/download.cgi[/url]?/span>Q?/span>下蝲AXIS2?/span>Binary Distribution url: [url]http://apache.justdn.org/ws/axis2/1_0/axis2-std-1.0-bin.zip[/url]?/span>war Distribution url: [url]http://apache.justdn.org/ws/axis2/1_0/axis2-1.0-docs.zip[/url]。把q两个文件解压,比如解压~的后得目录?/span>C:"axis2-std-1.0-bin?/span>C:"axis2.war?/span>
?/span>Eclipse下通过菜单window—preferences…--Java—Build Path—User Libraries 新徏一?/span>user library,比如名字叫axis2?/span>C:"axis2-std-1.0-bin"lib下的所?/span>jar文g包含q来。把axis2.war拯?/span>%TOMCAT-HOME%/webapps下面?/span>
 
2Q检验安?/span>
?/span>Eclipse下启?/span>TomcatQ在地址栏内输入[url]http://localhost:8080/axis2/[/url]?/span>
点击ValidateQ将到达 Axis2 Happiness Page?/span>
3Q?/span>WebService中的HelloWorld
1Q新Z个动?/span>web工程Q取?/span>ZZaxisQ右键点击项目名Q选择Properties-Java Build Path-Add Library-User Library-axis2?/span>
 
2Q新?/span>package sampleQ徏?/span>HelloWorld.javaQ代码如下?/span>
HelloWorld.java
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
 
public class HelloWorld {
       public OMElement sayHello(OMElement in){
              String name=in.getText();
              String info=name+"HelloWorld!";
              OMFactory fac=OMAbstractFactory.getOMFactory();
              OMNamespace omNs=fac.createOMNamespace("http://helloworld.com/","hw");
              OMElement resp=fac.createOMElement("sayHelloResponse",omNs);
              resp.setText(info);
              return resp;
       }
}
 
3Q在WebContent"META-INF"建立services.xmlQ代码如下?/span>
services.xml
<?xml version="1.0" encoding="UTF-8"?>
<service name="HelloWorld">
<description>
 This is a sample Web Service.
</description>
<parameter name="ServiceClass" locked="false">sample.HelloWorld</parameter>
<operation name="sayHello">
 <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
</service>
 
4Q将目录sample和目?/span>META-INFl织如下Q新建目?/span>exampleQ?/span>
+-example
|-------- +-sample
    |------- HelloWorld.class
|---------+-META-INF
       |-------services.xml
 
5Q打包生?/span>aar文g?/span>
在命令符环境下,当前目录{?/span>example?/span>
jar cvf HelloWorld.aar . //注意最后一个点Q在当前目录下生?/span>HelloWorld.aar?/span>
 
6Q在Eclipse中启?/span>TomcatQ在地址栏下键入[url]http://localhost:8080/axis2/[/url]。选择AdministrationQ输入用户名adminQ密?/span>axis2。选择左侧工具?/span>Tools- Upload ServiceQ上传之前打包的HelloWorld.aar。该文g在<CATALINA_HOME>/webapps/axis2"WEB-INF"services目录下?/span>
 
7Q编写客L验代码。新?/span>Java ProjectQ取名ؓZZaxisClient。右键点击项目名Q选择Properties-Java Build Path-Add Library-User Library-axis2?/span>
 
8Q新?/span>package example.client。徏?/span>TestClient.javaQ代码如下?/span>
TestClient.java
package example.client;
 
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
 
public class TestClient {
       private static EndpointReference targetEPR=new EndpointReference
        ("http://localhost:8080/axis2/services/HelloWorld");
       public static OMElement getSayHelloOMElement(){
              OMFactory fac=OMAbstractFactory.getOMFactory();
              OMNamespace omNs=fac.createOMNamespace("http://helloworld.com/","hw");
              OMElement method=fac.createOMElement("sayHello",omNs);
              method.setText("ZJ");
              return method;
       }
       public static void main(String[] args){
              try{
                     Options options=new Options();
                     options.setTo(targetEPR);
                     ServiceClient sender=new ServiceClient();
                     sender.setOptions(options);
                     OMElement sayHello=TestClient.getSayHelloOMElement();
                     OMElement result=sender.sendReceive(sayHello);
                     System.out.println(result);
              }
              catch(Exception axisFault){
                     axisFault.printStackTrace();
              }
       }
}
 
9Q测试,run TestClient.java as Java Application。结果:
<hw:sayHelloResponse xmlns:hw="http://helloworld.com/"
xmlns:tns="http://ws.apache.org/axis2">
ZJHelloWorld!
</hw:sayHelloResponse>


1Q?/span>HelloWorld做了些什么?
HelloWorld功能非常单,在客L输入你的姓名Q本例中?/span>ZJ。参C递到服务器端后,l过处理返?/span>name+"HelloWorld!"Q本例中?/span>ZJ HelloWorld!
 
2Q服务器端文?/span>HelloWorld.java
HelloWorld.java
package sample;
 
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
 
public class HelloWorld {
    //dclient?/span>getSayHelloOMElement()Ҏ传递的参数in?/span>
       public OMElement sayHello(OMElement in){
        //?/span>in转换?/span>String?/span>
              String name=in.getText();
              String info=name+"HelloWorld!";
        //创徏response SOAP包?/span>
              OMFactory fac=OMAbstractFactory.getOMFactory();
        // OMNamespace指定?/span>SOAP文档名称I间?/span>
              OMNamespace omNs=fac.createOMNamespace("http://helloworld.com/","hw");
        //创徏元素sayHelloQƈ指定其在omNs指代的名U空间中?/span>
              OMElement resp=fac.createOMElement("sayHelloResponse",omNs);
        //指定元素的文本内宏V?/span>
              resp.setText(info);
              return resp;
       }
}
 
3Q?/span>services.xml部v文g
services.xml
<?xml version="1.0" encoding="UTF-8"?>
//下面定义服务?/span>
<service name="HelloWorld">
<description>
 This is a sample Web Service.
</description>
// ServiceClass指定Java Class的位|,卛_现服务的cR?/span>
<parameter name="ServiceClass" locked="false">sample.HelloWorld</parameter>
// operation ?/span>Java Class中方法名对应?/span>
<operation name="sayHello">
// messageReceiver看下文注解?/span>
 <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
</service>
 
注解Q?/span>消息交换模式?/span>
目前Axis2支持三种模式Q?/span>In-Only?/span>Robust-In?/span>In-Out?/span>In-Only消息交换模式只有SOAPhQ而不需要应{;Robust-In消息交换模式发?/span>SOAPhQ只有在出错的情况下才返回应{;In-Out消息交换模式L存在SOAPh和应{。本例?/span>In-Out模式?/span>
 
4Q客L文gTestClient.java
TestClient.java
package example.client;
 
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
 
public class TestClient {
    // targetEPR指定打包?/span>ServiceQ?/span>.aar文gQ?/span>在容器中的物理位|?/span>
       private static EndpointReference targetEPR=new EndpointReference
        ("http://localhost:8080/axis2/services/HelloWorld");
       public static OMElement getSayHelloOMElement(){
        //创徏request SOAP包?/span>
              OMFactory fac=OMAbstractFactory.getOMFactory();
        // OMNamespace指定?/span>SOAP文档名称I间?/span>
              OMNamespace omNs=fac.createOMNamespace("http://helloworld.com/","hw");
        //创徏元素sayHelloQƈ指定其在omNs指代的名U空间中?/span>
              OMElement method=fac.createOMElement("sayHello",omNs);
        //指定元素的文本内宏V?/span>
              method.setText("ZJ");
              return method;
       }
       public static void main(String[] args){
              try{
                     Options options=new Options();
                     options.setTo(targetEPR);
                     ServiceClient sender=new ServiceClient();
                     sender.setOptions(options);
                     OMElement sayHello=TestClient.getSayHelloOMElement();
            //发出request SOAPQ?/span>
//同时得到的q端?/span>sayHelloҎq回的信息保存到result?/span>
//通过services.xml能准找?/span>sayHelloҎ所在的文g?/span>
                     OMElement result=sender.sendReceive(sayHello);
              }
              catch(Exception axisFault){
                     axisFault.printStackTrace();
              }
       }
}
 
5QAxis2?/span>
Apache Axis2 ?/span>Axis的后l版本,是新一代的SOAP引擎?/span>Axis2的主要特ҎQ?/span>
1Q采用名?/span> AXIOMQ?/span>AXIs Object ModelQ的新核?/span> XML 处理模型Q利用新?/span>XML解析器提供的灉|性按需构造对象模型?/span>
 
2Q支持不同的消息交换模式。目?/span>Axis2支持三种模式Q?/span>In-Only?/span>Robust-In?/span>In-Out?/span>In-Only消息交换模式只有SOAPhQ而不需要应{;Robust-In消息交换模式发?/span>SOAPhQ只有在出错的情况下才返回应{;In-Out消息交换模式L存在SOAPh和应{?/span>
 
3Q提供阻塞和非阻塞客L API?/span>
 
4Q支持内|的 Web服务d (WS-Addressing) ?/span>
 
5Q灵zȝ数据l定Q可以选择直接使用 AXIOMQ用与原来?/span> Axis 怼的简单数据绑定方法,或?/span> XMLBeans?/span>JiBX ?/span> JAXB 2.0 {专用数据绑定框架?/span>
 
6Q新的部|模型,支持热部|Ӏ?/span>
 
7Q支?/span>HTTPQ?/span>SMTPQ?/span>JMSQ?/span>TCP传输协议?/span>
 
8Q支?/span>REST (Representational State Transfer)?/span>
 
6Q?/span>Axis2 支持的规范包括:
-SOAP 1.1 and 1.2
-Message Transmission Optimization Mechanism (MTOM), XML Optimized Packaging (XOP) and SOAP with Attachments
-WSDL 1.1, including both SOAP and HTTP bindings
-WS-Addressing (submission and final)
-WS-Policy
-SAAJ 1.1
有关Axis2更加详细的介l,可以讉KAxis2|站[url]http://ws.apache.org/axis2/[/url]?/span>



西瓜 2009-11-23 21:37 发表评论
]]>
վ֩ģ壺 | ̨| Ժ| | | ʦ| | ˾| | | | | | | | Ȫ| ɾ| ˼| | | | | ̩| Դ| ʡ| | | ؿ˹| | | | | Ӫ| | | | | | ̽| | |