Web Services是自包含的、模块化的应用程序,它可以在网络(通常 为Web)中被描述、发布、查找以及调用.
SOAP和TCP一样是一种协议,
WSDL描述Web服务的公共接口。是为描述Web服务 发布的XML格式。
UDDI:Universal Description, Discovery, and Integration,是一个基于网络的分布式目录,列举各自的信息。在概念上类似于黄页号簿。由此可见:只有WebService是可以调用执行的。
其他的不可以执行。
SOAP和TCP一样是一种协议,
WSDL描述Web服务的公共接口。是为描述Web服务 发布的XML格式。
UDDI:Universal Description, Discovery, and Integration,是一个基于网络的分布式目录,列举各自的信息。在概念上类似于黄页号簿。由此可见:只有WebService是可以调用执行的。
其他的不可以执行。
*
* @author didoleo
* @axis.service scope = "Request" urn = "TestService"
*/public class TestService {
/**
* @axis.method
*/ public String test(String name) {
return "Hello, " + name;
}}
}
/////////////////////////////////////
用wsdl描述上面的服务:我用的是axis,所文件名为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="enableNamespacePrefixOptimization" value="false"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<parameter name="disablePrettyXML" value="true"/>
<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"/>
<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"/>
<service name="AdminService" 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" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
</service>
<!--注意这里 begin--> <service name="TestService" provider="java:RPC">
<parameter name="allowedMethods" value="test "/>
<parameter name="scope" value="Request"/>
<parameter name="className" value="com.didoleo.axis.server.TestService"/>
</service>
<!--注意这里 end--> <transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>//////////////////////客户端程序:
package com.didoleo.axis.client;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
public class TestClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8001/myaxis/services/TestService"; Service service = new Service();
Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName("http://didoleo.org/", "test")); String ret = (String) call.invoke(new Object[] { "didoleo!" }); System.out.println("Sent 'Hello!', got '" + ret + "'");
} catch (Exception e) {
System.err.println(e.toString());
} }
}/////总结
也是一种远程方法的调用(RPC),但不通于EJB
有这样的hello world就很好了