In the code below, I just added a main method to my conventional ws, so I can still use it inside an Axis container, but when needed I can
run it in stand-alone mode.
Note, for some reason known best to the Axis gods, the init(context) method will always have a null context, so you'll need some other solution
for start-up config if your were relying on this Context object from Axis...
Here's a direct copy paste of how I do it.
Note I don't use a deployment descriptor file, I just use it as an ugly string embedded in the code - maybe you'd prefer to
use your existing file:
public static final void main(String args[]) {
try {
org.apache.log4j.BasicConfigurator.configure();String deploymentStr = "<deployment xmlns=\"http://xml.apache.org/axis/wsdd/\" xmlns:java=\"http://xml.apache.org/axis/wsdd/providers/java\"> <!-- Services from SOAPControllerService WSDL service --> <service name=\"SOAPController\" provider=\"java:RPC\" style=\"rpc\" use=\"encoded\"> <parameter name=\"wsdlTargetNamespace\" value=\"urn:controller.mypackage.mycompany.com\"/> <parameter name=\"wsdlServiceElement\" value=\"SOAPControllerService\"/> <parameter name=\"wsdlServicePort\" value=\"SOAPController\"/> <parameter name=\"className\" value=\"com.mycompany.mypackage.controller.SOAPControllerSOAPBindingImpl\"/> <parameter name=\"wsdlPortType\" value=\"SOAPController\"/> <parameter name=\"scope\" value=\"Application\"/> <operation name=\"ticketStart\" qname=\"operNS:ticketStart\" xmlns:operNS=\"urn:controller.mypackage.mycompany.com/binding\" returnQName=\"return\" returnType=\"rtns:string\" xmlns:rtns=\"http://www.w3.org/2001/XMLSchema\" > <parameter name=\"ticket\" type=\"tns:string\" xmlns:tns=\"http://www.w3.org/2001/XMLSchema\"/> </operation> <operation name=\"ticketStatus\" qname=\"operNS:ticketStatus\" xmlns:operNS=\"urn:controller.mypackage.mycompany.com/binding\" returnQName=\"return\" returnType=\"rtns:string\" xmlns:rtns=\"http://www.w3.org/2001/XMLSchema\" > <parameter name=\"ticket\" type=\"tns:string\" xmlns:tns=\"http://www.w3.org/2001/XMLSchema\"/> </operation> <operation name=\"ticketResult\" qname=\"operNS:ticketResult\" xmlns:operNS=\"urn:controller.mypackage.mycompany.com/binding\" returnQName=\"return\" returnType=\"rtns:string\" xmlns:rtns=\"http://www.w3.org/2001/XMLSchema\" > <parameter name=\"ticket\" type=\"tns:string\" xmlns:tns=\"http://www.w3.org/2001/XMLSchema\"/> </operation> <operation name=\"ticketCancel\" qname=\"operNS:ticketCancel\" xmlns:operNS=\"urn:controller.mypackage.mycompany.com/binding\" returnQName=\"return\" returnType=\"rtns:string\" xmlns:rtns=\"http://www.w3.org/2001/XMLSchema\" > <parameter name=\"ticket\" type=\"tns:string\" xmlns:tns=\"http://www.w3.org/2001/XMLSchema\"/> </operation> <operation name=\"ticketEnd\" qname=\"operNS:ticketEnd\" xmlns:operNS=\"urn:controller.mypackage.mycompany.com/binding\" returnQName=\"return\" returnType=\"rtns:string\" xmlns:rtns=\"http://www.w3.org/2001/XMLSchema\" > <parameter name=\"ticket\" type=\"tns:string\" xmlns:tns=\"http://www.w3.org/2001/XMLSchema\"/> </operation> <parameter name=\"allowedMethods\" value=\"ticketEnd ticketResult ticketStatus ticketStart ticketCancel\"/> </service></deployment>";
InputStream deploymentDescriptorStream = new ByteArrayInputStream(deploymentStr.getBytes());
// start the Axis http server
org.apache.axis.transport.http.SimpleAxisServer server;
logger.info("Creating Axis server");
server = new org.apache.axis.transport.http.SimpleAxisServer();
int port = Integer.parseInt(System.getProperty(PropertyNames.mypackageControllerRPCPort,
PropertyNames.mypackageControllerRPCPortDefault));
logger.info("Opening server on port "+port);
ServerSocket ss = new ServerSocket(port);
server.setServerSocket(ss);
server.start(true);
// now deploy our Controller web service
logger.info("Creating AdminClient");
org.apache.axis.client.AdminClient adminClient;
adminClient = new org.apache.axis.client.AdminClient();
logger.info("Deploying Controller server web service");
adminClient.process(new org.apache.axis.utils.Options(new String[] {"-ddd","-tlocal"}),
deploymentDescriptorStream);
logger.info("Waiting for connections....");
}
catch (Throwable t) {
t.printStackTrace();
}// this loop prevents JVM from exiting, which Ant seems to do if it reaches here.
try {
while (1 < 2) {
Thread.sleep(60000);
}
}
catch (Throwable t) {
t.printStackTrace();
}
}
Daire Treanor wrote:
Hi,
Could somebody please tell me how to access services using a standalone java application that uses the SimpleAxisServer?
I can create the SimpleAxisServer just fine by doing the following
SimpleAxisServer axisServer = new SimpleAxisServer();
try{ axisServer.setServerSocket(new ServerSocket(50020)); axisServer.start(); } catch(IOException ioe) { ioe.printStackTrace(); } catch(Exception e){ e.printStackTrace(); }
My problem is how do I let the server instance know where the services are to be found and what services are available etc.
Regards, D�ire Treanor
