MyEclipse7.0创建基于Axis的Web service

MyEclipse7.0创建基于

AxisWeb service

 

 

 

 

目 录

 

1.    实验目的... 3

2.    实验环境... 3

2.1.     Axis2 1.4.1. 3

2.2.     Tomcat5.5. 3

2.3.     MyEclipse7.0. 3

3.    环境准备... 3

3.1.       下载所需资源... 3

3.2.     安装环境... 4

4.    Web Service创建、发布及测试... 6

4.1.     编写WSDL. 6

4.2.     WSDL生成Java代码... 8

4.3.     编写业务代码... 12

4.4.     生成测试的客户端程序... 13

4.5.     打包... 15

4.6.     部署... 17

4.7.     测试... 18

附件一:代码生成时的异常处理... 20

参考网站:... 21

 

 


1.   实验目的

通过该实验学生将掌握配置MyEclipse7.0axis Web Service的开发环境,通过Top-Down方式创建、发布基于axis Web Service的基本步骤,进一步加深学生对XMLWSDLSOAPWeb Service概念的理解。

2.   实验环境

使用Axis来开发Web services 需要准备web 服务器,Axis API,该实验使用的版本分别是。

2.1. Axis2 1.4.1

2.2. Tomcat5.5

2.3. MyEclipse7.0

3.   环境准备

3.1.     下载所需资源

                       i.              Axis2 1.4.1 下载地址

http://ws.apache.org/axis2/download/1_4_1/download.cgi 

下载的文件包括:axis2-1.4.1-bin.zipaxis2-1.4.1-src.zipaxis2-1.4.1-war.zipaxis2-1.4.1-docs.zip

                     ii.              Axis Eclipse plug-inAxis 生成web Services代码工具和打包工具,需要下载axis2-eclipse-codegen-wizard.zipaxis2-eclipse-service-archiver-wizard.zip二个plug-in文件.

http://apache.justdn.org/ws/axis2/tools/1_4_1/   

                   iii.              Tomcat下载地址

http://tomcat.apache.org/download-55.cgi

                    iv.              MyEclipse下载地址

http://www.myeclipse.com/

3.2. 安装环境

                        i.              安装下载的Tomcat5.5Myclipse7.0 过程略(Myclipse7.0的破解参考 MyEclipse7.0 注册码 序列号 Java版注册机源代码.doc)。

                      ii.              将下载到的Axis 的两个plug-in解压缩到MyEclipse安装目录下的plugins子目录。

目录一般如:C:\Program Files\MyEclipse 7.0M1\eclipse\plugins

                    iii.              重启MyEclipse,并选择“File->New->Other”可以找到下面的这些Wizards,这些将是本文中用到的很重要的工具。

                    iv.              解压axis2-1.4.1-war.zip文件并将axis2.war包拷贝到tomcat安装目录下的webapps目录中。

                      v.              启动Tomca,打开浏览器输入并访问:http://ip:port/axis2来查看。如果能看到下面的页面则说明已经安装完成。

 

4.   Web Service创建、发布及测试

到这里环境准备完成,接下来我们抓紧创建一个简单的demo。以便对使用Axis来开发Web services的大致流程有个了解。这个例子就是SayHello,请求端输入一个名字字符串,返回的将是一个问候语。

例如:输入了Tom,那么返回的事HiTom.How are you

4.1. 编写WSDL

启动MyEclipse,新建立一个WebAppsFile->New->Project->Web Project,Project Name SayHello,其他保持不改变。

                        i.              选择File->New-Other菜单,进入后找到MyEclipse->Web Services并选择WSDL

选择“src”目录作为“Enter or select the parent folder”的值,“File name”值给定为SayHello.wsdl。点击“Next”进入下一步。

                      ii.              将目标命名空间设置为“http://ws.easefulfil.org/SayHello/”.在生成代码的时候一般以这个命名空间为package的名字,例如:org.easefulfil.ws.sayhello。这些值可以按需要设置。

                    iii.              点击“Finish”按钮就可以看到MyEclipse提供的WSDL 设计器的界面了。可以看到设计器为WSDL默认的添加了一个现操作。

即图中的“NewOperation”。现在将其改名为SayHello,如下图:

之后点击设计界面中的“Source”Tab来查看其代码。如下:可以看到我们定义了一个SayHelloWeb Services,她提供了一个SayHello的方法,她能够接受一个String(事实上是tns:SayHelloRequest对象,她对String进行了封装)类型的输入参数SayHelloRequest并返回一个String(事实上是tns:SayHelloResponse对象,她对String进行了封装)类型的SayHelloResponse结果。更多关于WSDL的信息,请参考W3C的规范文档。

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

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.easefulfil.org/SayHello/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SayHello" targetNamespace="http://ws.easefulfil.org/SayHello/">

  <wsdl:types>

    <xsd:schema targetNamespace="http://ws.easefulfil.org/SayHello/">

      <xsd:element name="SayHelloRequest">

        <xsd:complexType>

          <xsd:sequence>

            <xsd:element name="in" type="xsd:string"/>

          </xsd:sequence>

        </xsd:complexType>

      </xsd:element>

      <xsd:element name="SayHelloResponse">

        <xsd:complexType>

          <xsd:sequence>

            <xsd:element name="out" type="xsd:string"/>

          </xsd:sequence>

        </xsd:complexType>

      </xsd:element>

    </xsd:schema>

  </wsdl:types>

  <wsdl:message name="SayHelloRequest">

    <wsdl:part element="tns:SayHelloRequest" name="sayHelloRequest" />

  </wsdl:message>

  <wsdl:message name="SayHelloResponse">

    <wsdl:part element="tns:SayHelloResponse" name="sayHelloResponse"/>

  </wsdl:message>

  <wsdl:portType name="SayHello">

    <wsdl:operation name="SayHello">

      <wsdl:input message="tns:SayHelloRequest"/>

      <wsdl:output message="tns:SayHelloResponse"/>

    </wsdl:operation>

  </wsdl:portType>

  <wsdl:binding name="SayHelloSOAP" type="tns:SayHello">

    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

    <wsdl:operation name="SayHello">

      <soap:operation soapAction="http://ws.easefulfil.org/SayHello/SayHello"/>

      <wsdl:input>

        <soap:body use="literal"/>

      </wsdl:input>

      <wsdl:output>

        <soap:body use="literal"/>

      </wsdl:output>

    </wsdl:operation>

  </wsdl:binding>

  <wsdl:service name="SayHello">

    <wsdl:port binding="tns:SayHelloSOAP" name="SayHelloSOAP">

      <soap:address location="http://www.example.org/"/>

    </wsdl:port>

  </wsdl:service>

</wsdl:definitions>

 

至此WSDL的编写已经完成。

4.2.WSDL生成Java代码

                        i.              选择菜单“File->New->Other”,从对话框中选取“Axis2 Wizards”下面的“Axis2 Code Generator”.点击“Next”进入下一个页面,保持“Generate java source code from WSDL file”被选中,点击“Next”进入下一步。

                      ii.              点击“Browse”来选取存放在src目录下的SayHello.wsdl文件,“Next”进入下一步。设置如下:

                    iii.               点击“next”进入下一个页面,设置“Output path”为本Projectsrc目录。点击“finish”后代在SayHello项目上按F5刷新就可以看到有代码生成好了。但是能看到一堆红“x”,这是由于没有将Axis2jar包放入class path 中以及源代码的package不为org.easefulfil.ws.sayhello引起的。

 

Exception: java.lang.reflect.InvocationTargetException  异常处理

见附件一:Exception: java.lang.reflect.InvocationTargetException  异常处理

 

                    iv.              MyEclispse 中添加一个用户库(User Library)命名为 axis2 ,将 axis2-1.4.1-bin\axis2-1.4.1\lib 下的包均添加进来。这一步操作的操作将解决如下问题。

 

 

添加一个用户库,解决上面的问题,首先选择“SayHello”项目,并右击选择“Build path->Add Libraries..”,

 

在下面的窗口中新建名为axis2Libaray,并将部署在tomcat中的axis2 web应用WEB-INF/lib目录中的所有jar包添加到该Lirary中。之后右击“src.org.easefulfil.ws.sayhello”项目,选择“Refactor->rename”,将包名修改为“org.easefulfil.ws.sayhello”即可。

 

4.3. 编写业务代码

打开SayHelloSKeleton.java文件将其中的实现方法   

        /**

         *Autogeneratedmethodsignature

         *

                                     *@paramsayHelloRequest

         */

public org.easefulfil.ws.sayhello.SayHelloResponse SayHello

                  (

                  org.easefulfil.ws.sayhello.SayHelloRequest sayHelloRequest )

{

                //TODO : fill this with the necessary business logic

thrownew  java.lang.UnsupportedOperationException("Please implement " + this.getClass().getName() + "#SayHello");

        }

}

 

改为

public org.easefulfil.ws.sayhello.SayHelloResponse SayHello

                  (

                  org.easefulfil.ws.sayhello.SayHelloRequest sayHelloRequest )

{

                //TODO : fill this with the necessary business logic

try

 

       {

 

           SayHelloResponse response = new SayHelloResponse();

 

           response.setOut("Hi," + sayHelloRequests.getIn()

                  + ".How are you?");

 

           return response;

 

       } catch (UnsupportedOperationException e)

 

       {

 

           throw e;

 

       }       

}

4.4. 生成测试的客户端程序

                        i.              代码生成的步骤同4.2,选择生成客户测试用例,并将包名修改为org.easefulfil.ws.sayhello.client,如下图

 

                      ii.              通过重构将src.org.easefulfil.ws.sayhello包名改为org.easefulfil.ws.sayhello.client 并将SayHelloTest.java类移到org.easefulfil.ws.sayhello.client包中,便可以解决下面的问题.

                    iii.              这个时候发现org.easefulfil.ws.sayhello.client下面的SayHelloTest.java仍然存在问题。选择public class SayHelloTest前的红“x”,选择第e二项。

 

 

                    iv.              进行完这几个改动之后,生成的代码就没有问题了。其中:

SayHelloRequestSayHelloResponse是输入输出参数对象。

SayHelloSkeleton是服务端对象,用来编写业务逻辑调用。

SayHelloStub是客户端用来定位endpoint(就是发布的Web Services的地址)的类,客户端根据其提供的方法定位Web服务并发起调用

SayHelloMessageReceiverInOut是一个实现同步调用的web服务信息转换处理类。

Resources目录下的services.xml文件是webservices的描述文件。

SayHelloTest是一个客户端的TestCase示例,用户可以根据这个示例来编写自己的客户端调用类。

4.5. 打包

                  i.              选择菜单“File->New->Other”,从对话框中选取“Axis2 Wizards”下面的“Axis2 Services Archive”.点击“Next”进入下一个页面。

                      ii.              选择编译好的class文件所在目录(本项目应该是WebRoot下面WEB-INF/classes),“Next”进入下一步。

                    iii.              选择WSDL文件所在目录,此处为src目录下的SayHello.wsdl文件。“Next”,再“Next” 选择services.xm文件,本文应该是生成在src/resources下面的services.xml文件。

                    iv.              点击“Next”,将记入最后一个页面,此处有两个选项,一个是输出目录一个是处处文件名称。我这里的输出文件名称给的是SayHello。点击“Finish”完成。

 

4.6.  部署

                        i.              将打包好的文件SayHello.aar,拷贝到Tomcat中已经部署的Axis2应用的WEB-INF/services目录下面。

                      ii.              启动Tomcat,如果已启动,重启Tomcat

                    iii.              打开浏览器,输入http://ipaddress:port/axis2(一般为http://localhost:8080/axis2,并点击其中的“services”链接,如果出现下面的错误,修改src/resources/services.xml

<parameter name="useOriginalwsdl">true</parameter>

<parameter name="useOriginalwsdl">false</parameter>即可。

                    iv.              重新执行4.5打包和4.6部署(A、B)过程,打开浏览器,输入http://ipaddress:port/axis2(一般为http://localhost:8080/axis2,并点击其中的“services”链接,可以看到SayHello已经被部署。点击SayHello提供的连接可以看到与之对应的WSDL

4.7. 测试

                        i.              修改SayHelloTest.java文件中的方法testSayHello的内容为:

  public  void testSayHello() throws java.lang.Exception{

 

        String url="http://localhost:8080/axis2/services/SayHello";

 

 

        org.easefulfil.ws.sayhello.client.SayHelloStub stub =

                    new org.easefulfil.ws.sayhello.client.SayHelloStub(url);//the default implementation should point to the right endpoint

 

           org.easefulfil.ws.sayhello.client.SayHelloStub.SayHelloRequest sayHelloRequest4=

                                                        (org.easefulfil.ws.sayhello.client.SayHelloStub.SayHelloRequest)getTestObject(org.easefulfil.ws.sayhello.client.SayHelloStub.SayHelloRequest.class);

                    // TODO : Fill in the sayHelloRequest4 here

           sayHelloRequest4.setIn("easefulfil");

 

           System.out.println(stub.SayHello(sayHelloRequest4).getOut());

 

 

                        assertNotNull(stub.SayHello(

                        sayHelloRequest4));

}


附件一:代码生成时的异常处理

Exception: java.lang.reflect.InvocationTargetException  异常处理

 

开发axis2中,我在用到axis2eclipse 插件是所遇到:Code Generator Finish 时产生Exception: java.lang.reflect.InvocationTargetException  这个问题,看到有很多人像我一样遇到这个问题,查了很多资料终于解决,我的开发环境是 Myeclipse7.0 +axis1.4.

 

狂晕:

 

必须先将这两个jar文件及plugins.xml修改好后放入plugins文件夹,否则还是会报异常。

解决方法:

1、将\webapps\axis2\WEB-INF\lib 目录下的backport-util-concurrent-3.1.jargeronimo-stax-api_1.0_spec-1.0.1.jar 二个文件拷贝到eclipse\plugins\Axis2_Codegen_Wizard_1.3.0\lib 文件夹中.

2修改eclipse\plugins\Axis2_Codegen_Wizard_1.3.0\plugins.xml,添加如下内容。

<runtime>
      ...
      <library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
         <export name="*"/>
      </library>
      <library name="lib/backport-util-concurrent-3.1.jar">
         <export name="*"/>
      </library>
      ...
 </runtime>

3启动Myeclipse 即可


参考网站:

http://www.diybl.com/course/3_program/java/javashl/2008414/110188.html 

http://blog.csdn.net/bonbonstella/archive/2007/05/17/1613401.aspx

http://panpan.blog.51cto.com/489034/119204 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
英文版的 3.汉化教程: (1)首先打开MyEclipse7.0 (2)然后选择Help → Software Updates.. (3)然后弹出一个菜单,选择Available Software → Add Site.. (4)然后会弹出一个输入框,输入http://download.eclipse.org/technology/babel/update- site/或者http://download.eclipse.org/technology/babel/update-site/ganymede / (5)然后点击确定,这时也许点该网址对应的列表刷不出来,我们要点一下Refresh 稍等一下选择列表里面的中文那一项 选择Eclipse language pack for Simplified chinese(只要有出现这一项,就不管Refresh进程了,直接进入下一步) (6)然后点击Install.. → 同意协议 最后等MyEclipse自动加载,可能加载过程有点慢,耐心等下,如果实在太慢了,重新选择一次试试,等完成再关闭MyEclipse 然后启动,MyEclipse就成了中文版的。(我觉得这是最好用的一种方法!) 4.注册码:(填写注册码时,最好拔掉网线!!!) Subscriber: www.1cn.biz Subscription Code: jLR8ZC-655444-65526656052107345 或者可以编写如下代码生成自己的MyEclipse7.0用户名和注册码!! (直接复制到MyEclipse7.0中并运行) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class zhuce { private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself."; public String getSerial(String userId, String licenseNum) { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.add(1, 3); cal.add(6, -1); java.text.NumberFormat nf = new java.text.DecimalFormat("000"); licenseNum = nf.format(Integer.valueOf(licenseNum)); String verTime = new StringBuilder("-").append( new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").toString(); String type = "YE3MP-"; String need = new StringBuilder(userId.substring(0, 1)).append(type).append("300").append(licenseNum).append(verTime).toString(); String dx = new StringBuilder(need).append(LL).append(userId) .toString(); int suf = this.decode(dx); String code = new StringBuilder(need).append(String.valueOf(suf)) .toString(); return this.change(code); } private int decode(String s) { int i; char[] ac; int j; int k; i = 0; ac = s.toCharArray(); j = 0; k = ac.length; while (j < k) { i = (31 * i) + ac[j]; j++; } return Math.abs(i); } private String change(String s) { byte[] abyte0; char[] ac; int i; int k; int j; abyte0 = s.getBytes(); ac = new char[s.length()]; i = 0; k = abyte0.length; while (i < k) { j = abyte0[i]; if ((j >= 48) && (j <= 57)) { j = (((j - 48) + 5) % 10) + 48; } else if ((j >= 65) && (j <= 90)) { j = (((j - 65) + 13) % 26) + 65; } else if ((j >= 97) && (j <= 122)) { j = (((j - 97) + 13) % 26) + 97; } ac[i] = (char) j; i++; } return String.valueOf(ac); } public zhuce() { super(); } public static void main(String[] args) { try { System.out.println("please input register name:"); BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); String userId = null; userId = reader.readLine(); zhuce myeclipsegen = new zhuce(); String res = myeclipsegen.getSerial(userId, "5"); System.out.println("Serial:" + res); reader.readLine(); } catch (IOException ex) { } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值