在集成springmvc+axis下webservice的开发与部署
二、项目代码
------------------------------------------------------
package TestAxis;
public interface TestI {
publicString getStr(String str);
}
------------------------------------------------------
package TestAxis;
public class TestImpl implements TestI {
publicString getStr(String str) {
returnstr;
}
}
------------------------------------------------------
package TestAxis;
import org.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
importorg.springframework.remoting.jaxrpc.ServletEndpointSupport;
服务接口代理类
@SuppressWarnings("deprecation")
public class TestProxyService extends ServletEndpointSupportimplements TestI {
privatestatic ApplicationContext context = null;
privatestatic TestI testI;
static{
context =new ClassPathXmlApplicationContext("spring-cxf.xml");
testI =(TestI)context.getBean("aa");
}
publicString getStr(String str) {
returntestI.getStr(str);
}
}
------------------------------------------------------
spring-cfg.xml配置文件如下:
<bean id="aa"class="TestAxis.TestImpl"></bean>
配置web.xml文件:加上下面代码
<!-- axis servlet start -->
<servlet>
<display-name>Apache-AxisServlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet>
<display-name>Axis AdminServlet</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>
<!-- axis servlet end -->
<!-- axis mapping start -->
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services_axis*</url-pattern>
</servlet-mapping>
<!-- axis mapping end -->
spring-config.wsdd配置文件代码
<deploymentxmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper"/>
<!-- 系统服务 -->
<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>
<!-- 自己的服务 -->
<service name="test"provider="java:RPC">
<parameter name="className"value="TestAxis.TestProxyService"></parameter>
<parameter name="allowedMethods"value="*"></parameter>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper" />
</requestFlow>
</transport>
</deployment>
---------------------------------------------------------
用tomcat或weblogic启动项目后:
IE: http://localhost:8080/epControl/services_axis/test
IE: http://localhost:8080/epControl/services_axis/test?wsdl
出现如上图证明服务已发布成功
---------------------------------------------------------
axis客户端(client)测试
---------------------------------------------------------
package TestAxis;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class TestAxisClient {
publicstatic void main(String[] args) {
StringwsdlURL ="http://localhost:8080/epControl/services_axis/test?wsdl";
StringnameSpaceURI ="http://localhost:8080/epControl/services_axis/test";
//创建调用对象
Serviceservice = new Service();
try {
Call call =(Call)service.createCall();
call.setOperationName(new QName(nameSpaceURI,"getStr"));
call.setTargetEndpointAddress(new URL(wsdlURL));
Object obj =call.invoke(new Object[]{"你好"});
if(obj!=null){
System.out.println(obj);
}
} catch(ServiceException e) {
e.printStackTrace();
} catch(MalformedURLException e) {
e.printStackTrace();
} catch(RemoteException e) {
e.printStackTrace();
}
}
}