用Axis构建java WEB Service

java

一、Axis安装 1、环境 jdk1.5,Tomcat 5.0

  

  2、到 http://ws.apache.org/Axis/网站下载Axis安装包

  

  3、解压缩安装包,将Axis_UNZIP_PATH\Axis-version\webapps下的Axis包拷贝到TOMCAT_HOME\webapps\下,以下约定Axis_HOME为该TOMCAT_HOME\webapps\Axis目录

  

  4、启动tomcat,访问http://localhost:8080/Axis 检查安装是否成功

  

  5、以上步骤执行成功,可以开发webservice例子了

Axis支持三种web service的部署和开发,分别为:1、Dynamic Invocation Interface ( DII)  2、Stubs方式 3、Dynamic Proxy方式

下面分别举例说明:

二、编写DII(Dynamic Invocation Interface )方式web服务

  

  1.编写服务端程序HelloClient

  

  public class HelloClient

  {

  public String getName(String name)

  {

  return "hello "+name;

  }

  }

  

  2、将源码拷贝到Axis_HOME下,重命名为 HelloClient.jws

  

  3、访问连接http://localhost:8080/Axis/HelloClient.jws?wsdl,页面显示Axis自动生成的wsdl

  

  4、编写访问服务的客户端 TestHelloClient.java

  

  import org.apache.Axis.client.Call;

  import org.apache.Axis.client.Service;

  import javax.xml.namespace.QName;

  import javax.xml.rpc.ServiceException;

  import java.net.MalformedURLException;

  import java.rmi.RemoteException;

  

  public class SayHelloClient2

  {

  public static void main(String[] args)

  {

  try

  {

  String endpoint =

  "http://localhost:8080/Axis/HelloClient.jws";

  

  Service service = new Service();

  Call call = null;

  

  call = (Call) service.createCall();

  

  call.setOperationName(new QName(

  "http://localhost:8080/Axis/HelloClient.jws",

  "getName"));

  call.setTargetEndpointAddress

  (new java.net.URL(endpoint));

  

  String ret = (String) call.invoke(new Object[]

  {"zhangsan"});

  System.out.println("return value is " + ret);

  }

  catch (Exception ex)

  {

  ex.printStackTrace();

  }

  }

  }

  

  三、编写Dynamic Proxy方式访问服务

  

  1、编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloClient

  

  2、编写代理接口

  

  public interface HelloClientInterface

  extends java.rmi.Remote

  {

  public String getName(String name)

  throws java.rmi.RemoteException;

  }

  

  3、编写并执行客户端程序TestHelloClient.java

  

  import javax.xml.rpc.Service;

  import javax.xml.rpc.ServiceFactory;

  import java.net.URL;

  import javax.xml.namespace.QName;

  

  public class TestHelloClient

  {

  public static void main(String[] args)

  {

  try

  {

  String wsdlUrl =

  "http://localhost:8080/Axis/HelloClient.jws?wsdl";

  String nameSpaceUri =

  "http://localhost:8080/Axis/HelloClient.jws";

  String serviceName = "HelloClientService";

  String portName = "HelloClient";

  

  ServiceFactory serviceFactory =

  ServiceFactory.newInstance();

  Service afService =

  serviceFactory.createService(new URL(wsdlUrl),

  new QName(nameSpaceUri, serviceName));

  HelloClientInterface proxy = (HelloClientInterface)

  afService.getPort(new QName(

  nameSpaceUri, portName),

  HelloClientInterface.class);

  System.out.println

  ("return value is "+proxy.getName("john") ) ;

  }catch(Exception ex)

  {

  ex.printStackTrace() ;

  }

  }

  }

  

  四、编写wsdd发布web服务,编写stub client访问web服务

  

  1、编写服务端程序server,SayHello.java,编译server.SayHello.java

  package server;

  public class SayHello

  {

  public String getName(String name)

  {

  return "hello "+name;

  }

  }

  

  2.编写LogHandler.java

  import org.apache.Axis.AxisFault;

  import org.apache.Axis.Handler;

  import org.apache.Axis.MessageContext;

  import org.apache.Axis.handlers.BasicHandler;

  

  import java.util.Date;

  

  public class LogHandler

  extends BasicHandler

  {

  public void invoke

  (MessageContext msgContext)

  throws AxisFault

  {

  /** Log an access each time

  we get invoked.

  */

  try {

  Handler serviceHandler

  = msgContext.getService();

  

  Integer numAccesses =

  (Integer)serviceHandler.getOption("accesses");

  if (numAccesses == null)

  numAccesses = new Integer(0);

  numAccesses = new Integer

  (numAccesses.intValue() + 1);

  Date date = new Date();

  String result =

  date + ": service " +

  msgContext.getTargetService() +

  " accessed " + numAccesses + " time(s).";

  serviceHandler.setOption

  ("accesses", numAccesses);

  System.out.println(result);

  } catch (Exception e)

  {

  throw AxisFault.makeFault(e);

  }

  }

  }

  

  3、编写wsdd文件

  

  deploy.wsdd

  <deployment xmlns=

  "http://xml.apache.org/Axis/wsdd/"

  xmlns:java=

  "http://xml.apache.org/Axis/wsdd/providers/java">

  <handler name="print" type="java:LogHandler"/>

  <service name="sayhello"

  provider="java:RPC">

  <requestFlow>

  <handler type="print"/>

  </requestFlow>

  <parameter name="className"

  value="server.SayHello"/>

  <parameter name="allowedMethods"

  value="*"/>

  </service>

  </deployment>

  

  3、将编译后的文件拷贝到Axis_HOME/WEB-INF/classes下,如:D:\tomcat\webapps\Axis\WEB-INF\classes

  

  4、发布服务:

  

  java org.apache.Axis.client.AdminClient deploy.wsdd

  

  5、生成client stub文件

  

  a:方式1

  

  将SayHello.java拷贝到Axis_HOME/下,重命名为SayHello.jws,

  

  执行下面的命令生存client stub

  

  java org.apache.Axis.wsdl.WSDL2Java

  -p client http://localhost:8080

  /Axis/services/SayHello.jws?wsdl

  

  b:方式2

  

  执行如下命令生成SayHello.wsdl

  

  java org.apache.Axis.wsdl.Java2WSDL

  -oSayHello.wsdl -lhttp://localhost:8080

  /Axis/services/SayHello -nsayhello server.SayHello

  

  执行如下命令生成client stub

  

  java org.apache.Axis.wsdl.WSDL2Java

  SayHello.wsdl -p client

  

  生成的stub client文件列表为:

  

  1.SayHello.java

  

  2.SayHelloService.java。

  

  3.SayHelloServiceLocator.java

  

  4.SayHelloSoapBindingStub.java

  

  6、编写客户端程序,编译并执行

  

  public class SayHelloClient

  {

  public static void main(String[] args)

  {

  try

  {

  SayHelloService service = new client.

  SayHelloServiceLocator();

  client.SayHello_PortType

  client = service.getSayHello();

  String retValue=client.getName("zhangsan");

  System.out.println(retValue);

  }

  catch (Exception e)

  {

  System.err.println

  ("Execution failed. Exception: " + e);

  }

  }

  }

  

  您也可以写server-config.wsdd

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

  <deployment xmlns="http://xml.apache.org/axis/wsdd/"

  xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

  <globalConfiguration>

  

  <parameter name="adminPassword" value="admin"/>

  <parameter name="attachments.implementation"

  value="org.apache.axis.attachments.AttachmentsImpl"/>

  <parameter name="sendXsiTypes" value="true"/>

  <parameter name="sendMultiRefs" value="true"/>

  <parameter name="sendXMLDeclaration" value="true"/>

  <parameter name="axis.sendMinimizedElements" value="true"/>

  

  <requestFlow>

  <handler type="java:org.apache.axis.handlers.JWSHandler">

  <parameter name="scope" value="session"/>

  </handler>

  

  <handler type="java:org.apache.axis.handlers.JWSHandler">

  <parameter name="scope" value="request"/>

  <parameter name="extension" value=".jwr"/>

  </handler>

  

  </requestFlow>

  

  </globalConfiguration>

  <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>

  <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>

  <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>

  <handler name="print" type="java:stub.LogHandler"/>

  

  <service name="sayhello" provider="java:RPC">

  <requestFlow>

  <handler type="print"/>

  </requestFlow>

  <parameter name="className"  value="stub.server.SayHello"/>

  <parameter name="allowedMethods" value="*"/>

  </service>

  

  <transport name="http">

  <requestFlow>

  <handler type="URLMapper"/>

  <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>

  </requestFlow>

  </transport>

  <transport name="local">

  <responseFlow>

  <handler type="LocalResponder"/>

  </responseFlow>

  </transport>

  </deployment>

以上是 用Axis构建java WEB Service 的全部内容, 来源链接: utcz.com/z/391973.html

回到顶部