Hello all!
I have problem with calling WS from corba. My interface is simple:
module com {
module pikeelectronic {
module calc {
interface Calculator {
double add(in double x, in double y);
double sub(in double x, in double y);
double mul(in double x, in double y);
double div(in double x, in double y);
};
};
};
};
I have converted this to WSDL and created a WS using CXF wsdl2java tools:
/**
* Please modify this class to meet your needs
* This class is not complete
*/
package com.pikeelectronic.calc.wsserver;
import java.util.logging.Logger;
import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
/**
* This class was generated by the CXF 2.0-incubator
* Wed Jul 18 14:05:16 CEST 2007
* Generated source version: 2.0-incubator
*
*/
@javax.jws.WebService(name = "ComPikeelectronicCalcCalculator",
serviceName = "com.pikeelectronic.calc.CalculatorCORBAService",
portName = "com.pikeelectronic.calc.CalculatorCORBAPort",
targetNamespace =
"http://schemas.apache.org/yoko/idl/calc",
wsdlLocation = "file:calc.wsdl" ,
endpointInterface =
"com.pikeelectronic.calc.wsserver.ComPikeelectronicCalcCalculator")
public class ComPikeelectronicCalcCalculatorImpl implements
ComPikeelectronicCalcCalculator {
private static final Logger LOG =
Logger.getLogger(ComPikeelectronicCalcCalculatorImpl.class.getPackage().getName());
/* (non-Javadoc)
* @see
com.pikeelectronic.calc.wsserver.ComPikeelectronicCalcCalculator#sub(double
x ,)double y )*
*/
public double sub(
double x,
double y
)
{
LOG.info("Executing operation sub");
return x - y;
}
/* (non-Javadoc)
* @see
com.pikeelectronic.calc.wsserver.ComPikeelectronicCalcCalculator#div(double
x ,)double y )*
*/
public double div(
double x,
double y
)
{
LOG.info("Executing operation div");
return x / y;
}
/* (non-Javadoc)
* @see
com.pikeelectronic.calc.wsserver.ComPikeelectronicCalcCalculator#mul(double
x ,)double y )*
*/
public double mul(
double x,
double y
)
{
LOG.info("Executing operation mul");
return x * y;
}
/* (non-Javadoc)
* @see
com.pikeelectronic.calc.wsserver.ComPikeelectronicCalcCalculator#add(double
x ,)double y )*
*/
public double add(
double x,
double y
)
{
LOG.info("Executing operation add");
return x + y;
}
}
I have implemented a client in JacORB:
package com.pikeelectronic.calc.CORBAClient;
/**
* An example for using the Dynamic Invocation Interface
*/
//import org.omg.CosNaming.*;
public class Client
{
public static void main( String[] args )
{
org.omg.CORBA.ORB orb = null;
try
{
orb = org.omg.CORBA.ORB.init(args,null);
org.omg.CORBA.Object obj =
orb.string_to_object("corbaloc::192.168.3.230:40000/calc");
/*org.omg.CORBA.Object object = orb.resolve_initial_references(
"NameService" );
NamingContext context = NamingContextHelper.narrow( object );*/
Calculator c = CalculatorHelper.narrow(obj);
System.out.println("Initialize ready.....");
System.out.println("2 + 2 = " + c.add((double)2, (double)2));
System.out.println("2 * 2 = " + c.mul((double)2, (double)2));
System.out.println("2 / 2 = " + c.div((double)2, (double)2));
System.out.println("2 - 2 = " + c.sub((double)2, (double)2));
}
catch (Exception e)
{
e.printStackTrace();
}
orb.shutdown(false);
}
}
I run the server (in the CXF standalone mode):
public class ComPikeelectronicCalcCalculatorServer{
protected ComPikeelectronicCalcCalculatorServer() throws Exception {
System.out.println("Starting Server");
Object implementor = new ComPikeelectronicCalcCalculatorImpl();
String address = "corbaloc::192.168.3.230:40000/calc";
Endpoint.publish(address, implementor);
}
public static void main(String args[]) throws Exception {
new ComPikeelectronicCalcCalculatorServer();
System.out.println("Server ready...");
Thread.sleep(60 * 60 * 1000);
System.out.println("Server exitting");
System.exit(0);
}
}
And I run the client. Its giving me this result:
org.omg.CORBA.BAD_PARAM: vmcid: 0x0 minor code: 0 completed: No
at
com.pikeelectronic.calc.CORBAClient.CalculatorHelper.narrow(CalculatorHelper.java:60)
at com.pikeelectronic.calc.CORBAClient.Client.main(Client.java:23)
Whats wrong? Did I miss something?
--
Lukas Zapletal
http://lukas.zapletalovi.com