我的services:
package com.my.services;import com.my.lib.*;public class ThisServiceImpl implements ThisService{
public MyResult MyFunction(MyParams paramList) throws java.rmi.RemoteException {
MyResult mr = new MyResult();
mr.setMyValue(1);
mr.setMyDesc("ok_" + paramList.getMyParam2().toString());
System.out.println("call...");
System.out.println(mr.getMyValue());
System.out.println(mr.getMyDesc());
return mr;
}
public Integer MyFunction2(String a) throws java.rmi.RemoteException {
System.out.println("call");
//String ret = new String(a + "_ha");
return 2;
}
}
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="sendMultiRefs" value="true"/>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="adminPassword" value="admin"/>
<parameter name="attachments.Directory" value="E:\JavaServer\apache-tomcat-6.0.14\webapps\WebProjectAxis\WEB-INF\attachments"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
<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="ThisServiceHttpPort" provider="java:RPC" style="document" use="literal">
<operation name="MyFunction" qname="MyFunction" returnQName="ns1:MyResult" returnType="ns1:MyResult" soapAction="MyFunction" xmlns:ns1="http://my.com/lib">
<parameter qname="ns1:MyParams" type="ns1:MyParams"/>
</operation>
<operation name="MyFunction2" qname="MyFunction2" returnQName="MyFunction2Result" returnType="rtns:int" xmlns:rtns="http://www.w3.org/2001/XMLSchema" soapAction="MyFunction2" >
<parameter qname="a" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
</operation>
<parameter name="allowedMethods" value="*"/>
<parameter name="typeMappingVersion" value="1.2"/>
<parameter name="wsdlPortType" value="MyFunction"/>
<parameter name="className" value="com.my.services.ThisServiceImpl"/>
<parameter name="wsdlServicePort" value="ThisServiceHttpPort"/>
<parameter name="schemaQualified" value="http://my.com/services,http://my.com/lib"/>
<parameter name="wsdlTargetNamespace" value="http://my.com/services"/>
<parameter name="wsdlServiceElement" value="ThisService"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns2:MyParams" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.my.lib.MyParams" xmlns:ns2="http://my.com/lib"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns3:MyResult" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.my.lib.MyResult" xmlns:ns3="http://my.com/lib"/>
</service>
<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>
<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.list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>调用:
import javax.xml.namespace.QName;import org.apache.axis.client.Call;
import org.apache.axis.client.Service;public class test2 {
/**
* @param args
*/
public static void main(String[] args) {
try {
String a = new String("sssss");
String endpoint = "http://198.9.0.64:8080/WebProjectAxis/services/ThisServiceHttpPort";
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName(new QName("", "MyFunction2"));
call.addParameter("a", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
//call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT);
//call.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
call.setReturnQName(new QName("http://www.w3.org/2001/XMLSchema", "MyFunction2Result"));
//String result = (String)call.invoke(new Object[]{a});
java.lang.Object result = call.invoke(new java.lang.Object[] {a});
System.out.println("return: " + result);
} catch(Exception e) {
e.printStackTrace();
}
}}debug发现可以调用到MyFunction2,参数也传递正确,就是返回到客户端总是null
package com.my.services;import com.my.lib.*;public class ThisServiceImpl implements ThisService{
public MyResult MyFunction(MyParams paramList) throws java.rmi.RemoteException {
MyResult mr = new MyResult();
mr.setMyValue(1);
mr.setMyDesc("ok_" + paramList.getMyParam2().toString());
System.out.println("call...");
System.out.println(mr.getMyValue());
System.out.println(mr.getMyDesc());
return mr;
}
public Integer MyFunction2(String a) throws java.rmi.RemoteException {
System.out.println("call");
//String ret = new String(a + "_ha");
return 2;
}
}
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="sendMultiRefs" value="true"/>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="adminPassword" value="admin"/>
<parameter name="attachments.Directory" value="E:\JavaServer\apache-tomcat-6.0.14\webapps\WebProjectAxis\WEB-INF\attachments"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
<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="ThisServiceHttpPort" provider="java:RPC" style="document" use="literal">
<operation name="MyFunction" qname="MyFunction" returnQName="ns1:MyResult" returnType="ns1:MyResult" soapAction="MyFunction" xmlns:ns1="http://my.com/lib">
<parameter qname="ns1:MyParams" type="ns1:MyParams"/>
</operation>
<operation name="MyFunction2" qname="MyFunction2" returnQName="MyFunction2Result" returnType="rtns:int" xmlns:rtns="http://www.w3.org/2001/XMLSchema" soapAction="MyFunction2" >
<parameter qname="a" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
</operation>
<parameter name="allowedMethods" value="*"/>
<parameter name="typeMappingVersion" value="1.2"/>
<parameter name="wsdlPortType" value="MyFunction"/>
<parameter name="className" value="com.my.services.ThisServiceImpl"/>
<parameter name="wsdlServicePort" value="ThisServiceHttpPort"/>
<parameter name="schemaQualified" value="http://my.com/services,http://my.com/lib"/>
<parameter name="wsdlTargetNamespace" value="http://my.com/services"/>
<parameter name="wsdlServiceElement" value="ThisService"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns2:MyParams" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.my.lib.MyParams" xmlns:ns2="http://my.com/lib"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns3:MyResult" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.my.lib.MyResult" xmlns:ns3="http://my.com/lib"/>
</service>
<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>
<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.list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>调用:
import javax.xml.namespace.QName;import org.apache.axis.client.Call;
import org.apache.axis.client.Service;public class test2 {
/**
* @param args
*/
public static void main(String[] args) {
try {
String a = new String("sssss");
String endpoint = "http://198.9.0.64:8080/WebProjectAxis/services/ThisServiceHttpPort";
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName(new QName("", "MyFunction2"));
call.addParameter("a", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
//call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT);
//call.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
call.setReturnQName(new QName("http://www.w3.org/2001/XMLSchema", "MyFunction2Result"));
//String result = (String)call.invoke(new Object[]{a});
java.lang.Object result = call.invoke(new java.lang.Object[] {a});
System.out.println("return: " + result);
} catch(Exception e) {
e.printStackTrace();
}
}}debug发现可以调用到MyFunction2,参数也传递正确,就是返回到客户端总是null
}
}
然后更新一下 server-config.wsdd, 再测试一次。