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

解决方案 »

  1.   

    public String MyFunction2(String a) throws java.rmi.RemoteException { System.out.println("call"); //String ret = new String(a + "_ha"); return "2"; 


    然后更新一下  server-config.wsdd, 再测试一次。
      

  2.   

    为何要自己写客户端? 你用axis2自带的生成工具生成客户端就好了,然后你专心调试服务器就ok了,省事很多。