WebService相关概念摘要
|
Web Server |
描述 |
Tomcat4.1 |
端口:8080 程序列表: 1,一个java普通类Class1.class:web service的主要调用类 ??有三个方法 2,WEB-INFO server-config.wsdd :对上面类的wsdd配置描述 ? |
Weblogic8.1 |
端口:7001 程序列表: 1,一个client的jsp文件,远程调用8080端口的webservice类中的方法 ? |
?
?
2.1.1.3.1???????编写并部署服务器的webservice
1,新建一个类,如图:
其中有三个方法,两个简单方法和一个返回类型为自定义类的方法.
写方法?test3的原因主要是要研究webservice如何传递自定义类以及如何在异构平台上传递和接收自定义类.
?
package com.bell.ws;
?
public class Class1 {
????public Class1() {
????}
????public String test1(String p1){
????????return "test1:"+p1;
????}
????public void test2(){
????????System.out.println("i'm test2");
????}
????public MyVO test3(MyVO myvo){
????????return myvo;
????}
}
?
?
?
2,?在WEB-INF目录下加入一个server-config.wsdd。这是WebServices的发布描述文件,作用类似于web.xml。它有自己的格式
其内容如下:
<?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">
?<service name="Class1" provider="java:RPC">
??<parameter name="allowedMethods" value="*"/>
??<parameter name="className" value="com.bell.ws.Class1"/>
?</service>
</deployment>
?
重启tomcat后,就可以看到刚刚发布的service了:
但这时点进wsdl时会出错:原因: 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"
????xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????name="defaultClientConfig" xsi:type="deployment">
????<globalConfiguration name="defaultClientConfig">
????????<parameter name="disablePrettyXML" value="true"/>
????????<parameter name="dotNetSoapEncFix" value="true"/>
????????<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="">
????????<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
????????<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
????????<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
????????<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="Class1" provider="java:RPC">
??<parameter name="allowedMethods" value="*"/>
??<parameter name="className" value="com.bell.ws.Class1"/>
?</service>
</deployment>
?
成功页面
?
?
2.1.1.3.2???????编写客户端程序调用远程webservice
??????????在上面webservice发布成功的前提下,编写客户端程序进行远程调用:
?
<%@ page import="org.apache.axis.client.Call,org.apache.axis.client.Service,org.apache.axis.encoding.XMLType,org.apache.axis.utils.Options" %>
<%@ page import="javax.xml.namespace.QName,javax.xml.rpc.ParameterMode" %>
<%
????????try {
????????????Service??service = new Service();
????????????Call????call????= (Call) service.createCall();
????????????call.setTargetEndpointAddress( new java.net.URL("http://localhost:8080/axis/services/Class1") );
????????????call.setOperationName( new QName("http://ws.mstar.org","test1") );
????????????call.addParameter( "arg1",XMLType.XSD_STRING,ParameterMode.IN);
????????????call.setReturnType( org.apache.axis.encoding.XMLType.XSD_STRING );
?
????????????String ret = (String) call.invoke( new Object[] { "first test!" } );
????????????System.out.println("You typed : " + ret);
????????????out.println("ret"+ret);
????????} catch (Exception e) {
???????????// e.printStackTrace();
????????????System.err.println(e.toString());
????????}
%>
?
?
正常调用的结果页面如下:
?
2.1.1.3.3???????编写返回复合类型的webservice
上面我们返回的只是简单的string型字串,下面举例说明如何返回复合类型的webservice:
还是使用上面的Class1.java,其中方法test3是返回的MyVO类型:
对server-config.wsdd进行配置:
?
目前会出现:
java.io.IOException: No serializer found for class com.bell.ws.MyVO in registry
org.apache.axis.encoding.TypeMappingDelegate@38fb59
2.1.2???Axis2
?
2.2????Jbuilder2006实现WebService
?
2.3????疑问
1,安全问题
2,有状态会话问题等等
3,如何跨平台返回复杂类型
4,即然java源文件+wsdd文件即可部署web service,jbuilder中生成的一堆文件是干嘛用的?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!