This week's book giveaway is in the JavaScript forum.
We're giving away four copies of Cross-Platform Desktop Applications: Using Node, Electron, and NW.js and have Paul Jensen on-line!
See this thread for details.
Win a copy of Cross-Platform Desktop Applications: Using Node, Electron, and NW.js this week in the JavaScript forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

Axis custom return types  RSS feed

 
M Burke
Ranch Hand
Posts: 410
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I want to return a custom object from call.invoke(). I am able to define the custom object as an imput parameter, but when I try to return the same object the serializer says it does not know what the object is.

" org.xml.sax.SAXException: Deserializing parameter 'findLoanApplicationReturn': could not find deserializer for type {urn:LoanAppService}Loan"

Am I missing a setup method? Or something in the WSDD?

Custom Object:

import java.io.Serializable;

public class LoanApplicationVO implements Serializable{

private static final long serialVersionUID = 1L;
private int loanID = 10;

public int getLoanID() {
return loanID;
}

public void setLoanID(int loanID) {
this.loanID = loanID;
}

public static long getSerialVersionUID() {
return serialVersionUID;
}


}



Client Code:

package bd.client;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;

import ws.loan.vo.LoanApplicationVO;

public class LoanBD {


public void findLoanApplication(){
try {
LoanApplicationVO lApp = new LoanApplicationVO();

String endPoint;
String operation;

endPoint = "http://localhost:8080/axis/services/LoanProcessor";
operation = "findLoanApplication";

QName qOperation = new QName(endPoint, operation);
QName qLoanApp = new QName( "urn:LoanAppService", "LoanApplicationVO" );

URL urlPoint = new URL(endPoint);

Object objArgs[] = new Object[] {lApp};
Service service = new Service();
Call call = (Call) service.createCall();

call.setTargetEndpointAddress(urlPoint);
call.setOperationName(qOperation);

call.registerTypeMapping(LoanApplicationVO.class, qLoanApp,
new BeanSerializerFactory(LoanApplicationVO.class, qLoanApp),
new BeanDeserializerFactory(LoanApplicationVO.class, qLoanApp));

call.addParameter( "arg1", qLoanApp, ParameterMode.IN );
call.setReturnQName(qLoanApp);

LoanApplicationVO retL = (LoanApplicationVO) call.invoke(objArgs);
System.out.println(retL.getLoanID());

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}




}


}

WSDD entry:

<service name="LoanProcessor" provider="java:RPC">
<parameter name="className" value="ws.loan.LoanProcessor"/>
<parameter name="allowedMethods" value="findLoanApplication"/>
<beanMapping qname="myNS:Loan" xmlns:myNS="urn:LoanAppService" languageSpecificType="java:ws.loan.vo.LoanApplicationVO"/>
</service>
[ March 31, 2006: Message edited by: M Burke ]
 
M Burke
Ranch Hand
Posts: 410
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I found the answer. I called call.setReturnQName(qLoanApp) rather than call.setReturnType(qLoanApp)
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!