AXIS简单实现入门

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

http://localhost/services

http://localhost/servlet/AdminServlet

l 至 http://ws.apache.org/axis

l 下载解压*.jar至lib

l 修改web.xml如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<web-app>

<display-name>Apache-Axis</display-name>

<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>

<servlet-name>AdminServlet</servlet-name>

<display-name>Axis Admin Servlet</display-name>

<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>

<load-on-startup>100</load-on-startup>

</servlet>

<servlet>

<servlet-name>SOAPMonitorService</servlet-name>

<display-name>SOAPMonitorService</display-name>

<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>

<init-param>

<param-name>SOAPMonitorPort</param-name>

<param-value>8100</param-value>

</init-param>

<load-on-startup>100</load-on-startup>

</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-mapping>

<servlet-name>SOAPMonitorService</servlet-name>

<url-pattern>/SOAPMonitor</url-pattern>

</servlet-mapping>

<!-- uncomment this if you want the admin servlet -->

<servlet-mapping>

<servlet-name>AdminServlet</servlet-name>

<url-pattern>/servlet/AdminServlet</url-pattern>

</servlet-mapping>

<!-- currently the W3C havent settled on a media type for WSDL;

http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft

for now we go with the basic 'it's XML' response -->

<mime-mapping>

<extension>wsdl</extension>

<mime-type>text/xml</mime-type>

</mime-mapping>

<mime-mapping>

<extension>xsd</extension>

<mime-type>text/xml</mime-type>

</mime-mapping>

<welcome-file-list id="WelcomeFileList">

<welcome-file>index.html</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>index.jws</welcome-file>

</welcome-file-list>

l 直接把所要发布的接口,以*.java 放入*.jws入root即ok

View the list of deployed Web services

http://localhost/servlet/AxisServlet

对*.jws访问进行url监控时我们可以很好的查看对方服务器的内部地址:

http://localhost/UNEXIST.jws 这样只能返回http 404错误

http://localhost/UNEXIST.jws?wsdl

AXIS error

Sorry, something seems to have gone wrong... here are the details:

Fault - ; nested exception is:

java.io.FileNotFoundException: h:\WSDL\defaultroot\xxx.jws (The system cannot find the file specified)

AxisFault

faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException

faultSubcode:

faultString: java.io.FileNotFoundException: h:\WSDL\defaultroot\xxx.jws (The system cannot find the file specified)

faultActor:

faultNode:

faultDetail:

l 实际编写Test.jws 到root目录

public class Test{

public String getMsg(){

System.out.println("happen act in getMsg()");

return "demo";

}

public void setMsg(String msg){

//--operation here

}

}

while compiling: h:\WSDL\defaultroot\WEB-INF\jwsClasses\Test.java

l 编写*.jws注意问题: 不能implement XXInterface,不要写package

看到效果:

http://localhost/Test.jws

表示正常,关键要WSDL能正常解析出来http://localhost/Test.jws?wsdl

There is a Web Service here Click to see the WSDL

到此步应该成功,在开始配置时有非常问题,发生在Web.xml与解析WSDL的相关正确经过几次三番成功用的是

JDK1.4+Tomcat4/WebLogic 7+Win

JDK1.3+WebLogic7+Unix tru64 5.1a

问题:

WebLogic7.1有可以,有机不行,一样建domain,总有时就不行

WebLogic7.1在Unix建domain一样copy to DefaultWebApp 就是有时不行,

根据WebServices调用之几种方法:

l http://localhost/Test.jws?method=getMsg

l http://localhost/Test.jws?method=setMsg&msg=hello

返回整个SOAP包与结果

l JBuilder8->New->Web Services->Import a Web Service:

Import A Web Service With Axis:

WSDL URL: http://localhost/Test.jws?wsdl

package: com.xxxx

生成如下类:

TestService.java

TestServiceLocator.java

TestServiceTestCase.java

Test.java

TestSoapBindingStub.java

TestSoapBindingImpl.java

还有:deploy.wsdd,undeploy.wsdd

调用:

TestService ts=new TestServiceLocator();

((TestSoapBindingStub)ts.get....).get..

该类为调用基于Microsoft SOAP的解决VC传指针引用返回内容Call远程方法后可调用StringHolder.value 取得值 javax.xml.rpc.holders.StringHolder;

l 第二种方式,用WSDL2JAVA生成本地调用

//在classpath包含6个jar文件

wsdl2java http://localhost/Test.jws?wsdl

F:\axis-1_1> set classpath=f:axis-ant.jar;f:axis.jar;f:commons-discovery.jar;f:co

mmons-logging.jar;f:jaxrpc.jar;f:log4j-1.2.8.jar;f:saaj.jar;f:wsdl4j.jar;

d:/j2sdk1.4.0/bin/java org.apache.axis.wsdl.WSDL2Java http://localho

st/Test.jws?wsdl

生成四个文件

TestService.java , TestServiceLocator.java , Test.java , TestSoapBindingStub.java

TestService test=new TestServiceLocator();

TestSoapBindingStub bind=(TestSoapBindingStub) test.getTestSoapPort();

后与jbuilder做本地调用

l 第三种方式,直接下载www.apache.org/soap 把jar包放入classpath中,编写调用代码:

import java.net.URL;

import java.util.Vector;

import java.util.Arrays;

import org.apache.soap.Constants;

import org.apache.soap.SOAPException;

import org.apache.soap.Envelope;

import org.apache.soap.Fault;

import org.apache.soap.rpc.Call;

import org.apache.soap.rpc.Response;

import org.apache.soap.rpc.Parameter;

public class HelloWorldClient {

public static void main(String args[]) {

String url = "http://localhost/Test.jws";

String remoteMethod = "setMsg";

String callers[]=new String[]{"Hello"};

try {

Call call = new Call();

call.setMethodName(remoteMethod);

Parameter params[]=new Parameter[callers.length];

for(int i=0;i<params.length;i++){

params[i]=new Parameter("callers"+i,callers[i].getClass(),callers[i],

Constants.NS_URI_SOAP_ENC);

}

Vector vect=new Vector(Arrays.asList(params)); call.setParams(vect);

Response resp = call.invoke(new URL(url), "");

if (resp.generatedFault()) {

Fault fault = resp.getFault();

System.out.println(": Call to " + remoteMethod + " returned a fault!");

System.out.println(" Fault code: " + fault.getFaultCode());

System.out.println(" Fault string: " + fault.getFaultString());

} else {

if (resp.getReturnValue() != null) {

Object result = resp.getReturnValue().getValue();

System.out.println("return" + ": " + result);

}

}

} catch (Exception exception) {

System.err.println("Error, caught exception: " + exception);

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航