技术开发 频道

J2EE应用:WebService服务的实现及调用

  【IT168 技术】

  eclipse下新建webapp项目

  此WebService服务由Axis实现,样例项目所需要jar包及目录:

  Web.xml配置

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"
>
<web-app>
  
<display-name>Apache-Axis</display-name>
  
<!--实际servlet程序,这里是AxisServlet-->
  
<servlet>
    
<servlet-name>AxisServlet</servlet-name>
    
<display-name>Apache-Axis Servlet</display-name>
    
<servlet-class>
     org.apache.axis.transport.http.AxisServlet
    
</servlet-class>
  
</servlet>
  
<!-- 定义servlet和url的对应关系-->
  
<servlet-mapping>
    
<servlet-name>AxisServlet</servlet-name>
    
<url-pattern>/services/*</url-pattern>
  
</servlet-mapping>
</web-app>

WebService服务:

package com.archie.service;
/**
* 服务MyService
*
@author archie
*
* since 2011-7-13 下午02:34:57
*/
public class SayHelloService {
    
/**
     * 输出List集中字符串
     *
@return
    
*/
    
public String SayHello2WS(String name){ return "Hello,WebService!"+"_____by"+"\t"+name;
    }
}

WebService服务的配置(server-config.xml)

  server-config.xml(WEB-INF目录下)

<?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="GlobalConfiguration1" type="" regenerateElement="false">
<requestFlow name="RequestFlow1" type="" regenerateElement="false">
<handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler" regenerateElement="false">
<parameter name="scope" value="session" regenerateElement="false"/>
</handler>
<handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler" regenerateElement="false">
<parameter name="scope" value="request" regenerateElement="false"/>
<parameter name="extension" value=".jwr" regenerateElement="false"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" regenerateElement="false"/>
<handler name="LocalResponder"
type
="java:org.apache.axis.transport.local.LocalResponder" regenerateElement="false"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" regenerateElement="false"/>
<transport name="http" type="" regenerateElement="false">
<requestFlow name="RequestFlow1" type="" regenerateElement="false">
<handler name="Handler1" type="URLMapper" regenerateElement="false"/>
<handler name="Handler2" type="java:org.apache.axis.handlers.http.HTTPAuthHandler" regenerateElement="false"/>
</requestFlow>
</transport>
<transport name="local" type="" regenerateElement="false">
<responseFlow name="ResponseFlow1" type="" regenerateElement="false">
<handler name="Handler1" type="LocalResponder" regenerateElement="false"/>
</responseFlow>
</transport>
<service name="AdminService" type="" regenerateElement="false" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService" regenerateElement="false"/>
<parameter name="enableRemoteAdmin" value="false" regenerateElement="false"/>
<parameter name="className" value="org.apache.axis.utils.Admin" regenerateElement="false"/> <namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" type="" regenerateElement="false" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion" regenerateElement="false"/>
<parameter name="className" value="org.apache.axis.Version" regenerateElement="false"/>
</service>
<!-- 配置发布的Service -->
<service name="SayHelloService" provider="java:RPC">
<parameter name="className" value="com.archie.service.SayHelloService"/>
<parameter name="allowedMethods" value="*" />
</service>
</deployment>

  Tomcat6.0下发布

  URL:http://localhost:8080/MyWebService/services/SayHelloService

  浏览其wsdl文件

  URL:http://localhost:8080/MyWebService/services/SayHelloService?wsdl

  wsdl

<?xml version="1.0" encoding="UTF-8" ?>
-
<wsdl:definitions targetNamespace="http://localhost:8080/MyWebService/services/SayHelloService" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/MyWebService/services/SayHelloService" xmlns:intf="http://localhost:8080/MyWebService/services/SayHelloService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-
<!--
WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)
-->
-
<wsdl:message name="SayHello2WSResponse">
<wsdl:part name="SayHello2WSReturn" type="soapenc:string" />
</wsdl:message>
-
<wsdl:message name="SayHello2WSRequest">
<wsdl:part name="name" type="soapenc:string" />
</wsdl:message>
-
<wsdl:portType name="SayHelloService">
-
<wsdl:operation name="SayHello2WS" parameterOrder="name">
<wsdl:input message="impl:SayHello2WSRequest" name="SayHello2WSRequest" />
<wsdl:output message="impl:SayHello2WSResponse" name="SayHello2WSResponse" />
</wsdl:operation>
</wsdl:portType>
-
<wsdl:binding name="SayHelloServiceSoapBinding" type="impl:SayHelloService">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
-
<wsdl:operation name="SayHello2WS">
<wsdlsoap:operation soapAction="" />
-
<wsdl:input name="SayHello2WSRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.archie.com" use="encoded" />
</wsdl:input>
-
<wsdl:output name="SayHello2WSResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/MyWebService/services/SayHelloService" use="encoded" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
-
<wsdl:service name="SayHelloServiceService">
-
<wsdl:port binding="impl:SayHelloServiceSoapBinding" name="SayHelloService">
<wsdlsoap:address location="http://localhost:8080/MyWebService/services/SayHelloService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

  该服务的调用:

package com.archie.service.test;
import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
/**
* WebService接口测试
*
@author archie
*
* since 2011-7-13 下午02:06:37
*/
public class TestSayHello {
public static void main(String[] args) throws Exception {
//创建一个服务对象
Service service = new Service();
//创建一个对方法的调用
Call call = service.createCall();
/**
* 设置调用的终端地址
* AnotherMethod为server-config.wsdd的Service配置名称
*/
String url
= "http://localhost:8080/MyWebService/services/SayHelloService";
call.setTargetEndpointAddress(
url);
call.setReturnType(XMLType.XSD_STRING);
//设置操作名,即所调用的方法的名称
call.setOperationName(new QName("SayHello2WS"));
//添加参数(参数名,参数类型,参数传递模式)
call.addParameter("name", XMLType.XSD_STRING, ParameterMode.IN);
//调用方法
String res = (String) call.invoke(new Object[]{"archie"});
System.out.println(
"调用返回结果:"+res);
}
}

  运行结果:

浏览其wsdl文件

0
相关文章