这里介绍一种可以直接发布Webservice的方式,只需要在WEB-INF下添加server-config.wsdd文件即可。其实axis1生成deploy.wsdd和undeploy.wsdd文件的本质是为了生成server-config.wsdd。
下面为示例,项目目录结构,采用maven构建。
编写服务器端代码:
package server;
import javax.servlet.http.HttpServletRequest;
import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;
/**
* @author zhuc
* @create 2013-2-28 上午9:34:29
*/
public class HelloService {
/**
* @param name
* @return
*/
public String sayHello(String name) {
MessageContext mc = MessageContext.getCurrentContext();
HttpServletRequest request = (HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
System.out.println(request.getRemoteHost());
System.out.println("服务器端收到:" + name);
return "你好:" + name;
}
}
在WEB-INF下添加文件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"> <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" /> <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" /> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /> <service name="HelloService" type="" provider="java:RPC" style="rpc" use="encoded"> <parameter name="scope" value="Request" /> <parameter name="className" value="server.HelloService" /> <parameter name="allowedMethods" value="*" /> </service> <transport name="local"> <responseFlow> <handler type="LocalResponder" /> </responseFlow> </transport> <transport name="http"> <requestFlow> <handler type="URLMapper" /> <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" /> </requestFlow> </transport> </deployment>
web.xml内容为:
<!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>Archetype Created Web Application</display-name> <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> <servlet> <display-name>Axis Admin Servlet</display-name> <servlet-name>AdminServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> </web-app>
这会我们的发布工作已经完成,启动Jetty查看
发布成功!
我们客户端访问来实验下:
package client;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
/**
* @author zhuc
* @create 2013-2-28 上午9:41:52
*/
public class Test1 {
/**
* 访问webservices地址
*/
private String endpointURL;
/**
* 调用webservices 服务的方法
*/
private String serviceMethod;
/**
* 传递webservices 参数
*/
private Object[] paraMets;
/**
* @return the endpointURL
*/
public String getEndpointURL() {
return endpointURL;
}
/**
* @return the serviceMethod
*/
public String getServiceMethod() {
return serviceMethod;
}
/**
* @return the paraMets
*/
public Object[] getParaMets() {
return paraMets;
}
/**
* @param endpointURL the endpointURL to set
*/
public void setEndpointURL(String endpointURL) {
this.endpointURL = endpointURL;
}
/**
* @param serviceMethod the serviceMethod to set
*/
public void setServiceMethod(String serviceMethod) {
this.serviceMethod = serviceMethod;
}
/**
* @param paraMets the paraMets to set
*/
public void setParaMets(Object[] paraMets) {
this.paraMets = paraMets;
}
/**
* @return
* @throws Exception
*/
public Object getRequestResult() throws Exception {
Object object = null;
Service service = new Service();
Call call = null;
call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpointURL));
call.setOperationName(serviceMethod);
call.setReturnType(XMLType.XSD_STRING);
call.addParameter(serviceMethod, XMLType.XSD_STRING, ParameterMode.IN);
object = call.invoke(paraMets);
return object;
}
/**
* @param args
*/
public static void main(String[] args) {
Test1 au = new Test1();
au.setEndpointURL("http://localhost:8080/axis1/services/HelloService?wsdl");
au.setParaMets(new Object[] { "zhuc" });
au.setServiceMethod("sayHello");
try {
Object object = au.getRequestResult();
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端输出:
你好:zhuc
服务器端输出:
127.0.0.1
服务器端收到:zhuc