webservice

一、服务器端开发

       首先编写服务端程序,这时我们完全不用考虑他是不是当作webservcies来发布的,因为在写法上没有什么不同。比如我们写了一个很简单的java程序,代码如下:

package samples.userguide.example2 

public class calculator {

public int add(int i1  int i2)

{

     return i1 + i2 

}

public int subtract(int i1  int i2)

{

     return i1 - i2 

}

}

如果我们要把他发布成为services,首先需要把axis-1_3下的lib文件复制到我们的web服务的web-inf 的lib下。 然后在web.xml里增加以下内容

< servlet> 

     < display-name> apache-axis servlet< /display-name> 

     < servlet-name> axisservlet< /servlet-name> 

     < servlet-class> org.apache.axis.transport.http.axisservlet< /servlet-class> 

< /servlet> 

< servlet-mapping> 

     < servlet-name> axisservlet< /servlet-name> 

     < url-pattern> /servlet/axisservlet< /url-pattern> 

< /servlet-mapping> 

< servlet-mapping> 

     < servlet-name> axisservlet< /servlet-name> 

     < url-pattern> .jws< /url-pattern> 

< /servlet-mapping> 

< servlet-mapping> 

     < servlet-name> axisservlet< /servlet-name> 

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

< /servlet-mapping> 

第一个是制定axisservlet的类是必须的,余下的是配置servlet mapping的,可根据需要进行修改,比如不需要对 .jws做mapping的时候就可以去掉相应的部分。完成了上边的必须配置我们就有两种方式来发布了:

1、动态发布,直接把calculator 的java文件复制到webroot下,把calculator.java更名为calculator.jws,然后通过 http://localhost:8080/calculator.jws 访问就可以 ,通过 http://localhost:8080/calculator.jws?wsdl 就可以看到相应的wsdl。这种方式调试起来比较麻烦,而且我再测试的时候也不能带package的信息,而且一些高级的配置无法实施,不建议采用。

2、静态发布,就是通过配置文件发布,这时候我们类的编译和普通的web方式没有不同,只是在web-inf下多了一个配置文件,默认的名称为server-config.wsdd

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

< deployment name=" defaultclientconfig" 

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

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

     < globalconfiguration name=" defaultclientconfig" > 

         < requestflow name=" requestflow1"  type=" " > 

             < handler name=" handler1"  type=" java:org.apache.axis.handlers.jwshandler" > 

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

             < /handler> 

             < handler name=" handler2"  type=" java:org.apache.axis.handlers.jwshandler" > 

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

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

             < /handler> 

         < /requestflow> 

     < /globalconfiguration> 

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

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

     < handler name=" authenticate"  type=" java:org.apache.axis.handlers.simpleauthenticationhandler" /> 

     < transport name=" http"  type=" " > 

         < requestflow name=" requestflow1"  type=" " > 

             < handler name=" handler1"  type=" urlmapper" /> 

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

         < /requestflow> 

     < /transport> 

     < transport name=" local"  type=" " > 

         < responseflow name=" responseflow1"  type=" " > 

             < handler name=" handler1"  type=" localresponder" /> 

         < /responseflow> 

     < /transport> 

     < service name=" adminservice"  type=" "  provider=" java:msg" > 

         < parameter name=" allowedmethods"  value=" adminservice" /> 

         < parameter name=" enableremoteadmin"  value=" false" /> 

         < parameter name=" classname"  value=" org.apache.axis.utils.admin" /> 

         < namespace> http://xml.apache.org/axis/wsdd/< /namespace> 

     < /service> 

     < service name=" version"  type=" "  provider=" java:rpc" > 

         < parameter name=" allowedmethods"  value=" getversion" /> 

         < parameter name=" classname"  value=" org.apache.axis.version" /> 

     < /service> 

     < service name=" calculator"  type=" "  provider=" java:rpc"  style=" rpc"  use=" encoded" > 

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

         < parameter name=" classname"  value=" samples.userguide.example2.calculator" /> 

         < parameter name=" allowedmethods"  value=" " /> 

         < namespace> http://example2.userguide.samples< /namespace> 

     < /service> 

     < service name=" orderprocessor"  provider=" java:rpc" > 

         < parameter name=" classname"  value=" samples.userguide.example5.beanservice" /> 

         < parameter name=" allowedmethods"  value=" " /> 

         < beanmapping qname=" myns:order"  xmlns:myns=" urn:beanservice"  languagespecifictype=" java:samples.userguide.example5.order" /> 

     < /service> 

< /deployment> 

其中要发布的每个service都需要加上一个service的节点描述,其他多余的servie节点可以删除的,这样重启tomcat后,我们就可以以http://localhost:8080/services/calculator 来访问这个service了,同样以http://localhost:8080/services/calculator?wsdl 访问到它的wsdl描述文件。

二、客户端开发

在开发工具中引进lib下的jar包;然后编写客户端程序

package samples.userguide.example2 

import org.apache.axis.client.call 

import org.apache.axis.client.service 

import org.apache.axis.encoding.xmltype 

import org.apache.axis.utils.options 

import javax.xml.rpc.parametermode 

public class calcclient

{

    public static void main(string [] args) throws exception {

        try{

            string endpoint = " https://localhost:8440/services/calculator"  

            integer i1 = new integer(1) 

            integer i2 = new integer(2) 

            service service = new service() 

            call call = (call) service.createcall() 

            call.settargetendpointaddress(new java.net.url(endpoint)) 

            call.setoperationname(" add" ) 

            call.addparameter(" i1"   xmltype.xsd_int  parametermode.in) 

            call.addparameter(" i2"   xmltype.xsd_int  parametermode.in) 

            call.setreturntype(xmltype.xsd_int) 

            integer ret = (integer) call.invoke(new object[] {i1  i2}) 

            system.out.println(" got result : "  + ret) 

        }

        catch(exception e){

            e.printstacktrace() 

        }

    }

}

其中 setoperationname就是指定执行的方法,addparameter就是指定参数

运行一下吧

0

0

0

你可能感兴趣的:(java,apache,xml,webservice,servlet)