Methods Summary |
---|
public javax.xml.rpc.Call | createCall(javax.xml.namespace.QName portName)Creates a new Call object - will prefill as much info from the WSDL
as it can. Right now it's just the target URL of the Web Service.
Call call = (org.apache.axis.client.Call) createCall();
call.setPortName(portName);
// We can't prefill information if WSDL is not specified,
// So just return the call that we just created.
if (wsdlParser == null)
return call;
Port port = wsdlService.getPort(portName.getLocalPart());
if (port == null)
throw new ServiceException(Messages.getMessage("noPort00", "" + portName));
Binding binding = port.getBinding();
PortType portType = binding.getPortType();
if (portType == null)
throw new ServiceException(Messages.getMessage("noPortType00", "" + portName));
// Get the URL
////////////////////////////////////////////////////////////////////
List list = port.getExtensibilityElements();
for (int i = 0; list != null && i < list.size(); i++) {
Object obj = list.get(i);
if (obj instanceof SOAPAddress) {
try {
SOAPAddress addr = (SOAPAddress) obj;
URL url = new URL(addr.getLocationURI());
call.setTargetEndpointAddress(url);
} catch (Exception exp) {
throw new ServiceException(
Messages.getMessage("cantSetURI00", "" + exp));
}
}
}
return (call);
|
public javax.xml.rpc.Call | createCall(javax.xml.namespace.QName portName, java.lang.String operationName)Creates a new Call object - will prefill as much info from the WSDL
as it can. Right now it's target URL, SOAPAction, Parameter types,
and return type of the Web Service.
Call call = (org.apache.axis.client.Call) createCall();
call.setOperation(portName, operationName);
return (call);
|
public javax.xml.rpc.Call | createCall(javax.xml.namespace.QName portName, javax.xml.namespace.QName operationName)Creates a new Call object - will prefill as much info from the WSDL
as it can. Right now it's target URL, SOAPAction, Parameter types,
and return type of the Web Service.
Call call = (org.apache.axis.client.Call) createCall();
call.setOperation(portName, operationName);
return (call);
|
public javax.xml.rpc.Call | createCall()Creates a new Call object with no prefilled data. This assumes
that the caller will set everything manually - no checking of
any kind will be done against the WSDL.
_call = new org.apache.axis.client.Call(this);
return _call;
|
protected AxisClient | getAxisClient()
return new AxisClient(getEngineConfiguration());
|
public boolean | getCacheWSDL()Tells whether or not we're caching WSDL
return cachingWSDL;
|
public Call | getCall()Returns last Call object associated with this service. Note that since
the Service is not thread-safe, you may not get the last call object
that you created on this thread. please use Stub._getCall
return _call;
|
public javax.xml.rpc.Call[] | getCalls(javax.xml.namespace.QName portName)Gets an array of preconfigured Call objects for invoking operations
on the specified port. There is one Call object per operation that
can be invoked on the specified port. Each Call object is
pre-configured and does not need to be configured using the setter
methods on Call interface.
This method requires the Service implementation class to have access
to the WSDL related metadata.
if (portName == null)
throw new ServiceException(Messages.getMessage("badPort00"));
if (wsdlService == null)
throw new ServiceException(Messages.getMessage("wsdlMissing00"));
Port port = wsdlService.getPort(portName.getLocalPart());
if (port == null)
throw new ServiceException(Messages.getMessage("noPort00", "" + portName));
Binding binding = port.getBinding();
SymbolTable symbolTable = wsdlParser.getSymbolTable();
BindingEntry bEntry =
symbolTable.getBindingEntry(binding.getQName());
Iterator i = bEntry.getParameters().keySet().iterator();
Vector calls = new Vector();
while (i.hasNext()) {
Operation operation = (Operation) i.next();
javax.xml.rpc.Call call = createCall(QName.valueOf(port.getName()),
QName.valueOf(operation.getName()));
calls.add(call);
}
javax.xml.rpc.Call[] array = new javax.xml.rpc.Call[calls.size()];
calls.toArray(array);
return array;
|
public org.apache.axis.AxisEngine | getEngine()Returns the current AxisEngine used by this Service and all of the
Call objects created from this Service object.
Note: Not part of the JAX-RPC spec.
return (engine);
|
protected org.apache.axis.EngineConfiguration | getEngineConfiguration()Constructs a EngineConfig if one is not available.
if (this.config == null) {
this.config = EngineConfigurationFactoryFinder.newFactory().getClientEngineConfig();
}
return config;
|
private java.rmi.Remote | getGeneratedStub(javax.xml.namespace.QName portName, java.lang.Class proxyInterface)With the proxyInterface and the service's portName, we have
ALMOST enough info to find a generated stub. The generated
stub is named after the binding, which we can get from the
service's port. This binding is likely in the same namespace
(ie, package) that the proxyInterface is in. So try to find
and instantiate .Stub.
If it doesn't exist, return null.
try {
String pkg = proxyInterface.getName();
pkg = pkg.substring(0, pkg.lastIndexOf('."));
Port port = wsdlService.getPort(portName.getLocalPart());
String binding = port.getBinding().getQName().getLocalPart();
Class stubClass = ClassUtils.forName(
pkg + "." + binding + "Stub");
if (proxyInterface.isAssignableFrom(stubClass)) {
Class[] formalArgs = {javax.xml.rpc.Service.class};
Object[] actualArgs = {this};
Constructor ctor = stubClass.getConstructor(formalArgs);
Stub stub = (Stub) ctor.newInstance(actualArgs);
stub._setProperty(
Stub.ENDPOINT_ADDRESS_PROPERTY,
WSDLUtils.getAddressFromPort(port));
stub.setPortName(portName);
return (Remote) stub;
} else {
return null;
}
} catch (Throwable t) {
return null;
}
|
public javax.xml.rpc.handler.HandlerRegistry | getHandlerRegistry()Returns the configured HandlerRegistry instance for this Service
instance.
NOTE: This Service currently does not support the configuration
of a HandlerRegistry! It will throw a
java.lang.UnsupportedOperationException.
return registry;
|
public boolean | getMaintainSession()If true, this service wants to track sessions.
return maintainSession;
|
public java.rmi.Remote | getPort(javax.xml.namespace.QName portName, java.lang.Class proxyInterface)Return either an instance of a generated stub, if it can be
found, or a dynamic proxy for the given proxy interface.
if (wsdlService == null)
throw new ServiceException(Messages.getMessage("wsdlMissing00"));
Port port = wsdlService.getPort(portName.getLocalPart());
if (port == null)
throw new ServiceException(Messages.getMessage("noPort00", "" + portName));
// First, try to find a generated stub. If that
// returns null, then find a dynamic stub.
Remote stub = getGeneratedStub(portName, proxyInterface);
return stub != null ? stub : getPort(null, portName, proxyInterface);
|
public java.rmi.Remote | getPort(java.lang.Class proxyInterface)Return a dynamic proxy for the given proxy interface.
if (wsdlService == null)
throw new ServiceException(Messages.getMessage("wsdlMissing00"));
Map ports = wsdlService.getPorts();
if (ports == null || ports.size() <= 0)
throw new ServiceException(Messages.getMessage("noPort00", ""));
// Get the name of the class (without package name)
String clazzName = proxyInterface.getName();
if(clazzName.lastIndexOf('.")!=-1) {
clazzName = clazzName.substring(clazzName.lastIndexOf('.")+1);
}
// Pick the port with the same name as the class
Port port = (Port) ports.get(clazzName);
if(port == null) {
// If not found, just pick the first port.
port = (Port) ports.values().iterator().next();
}
// First, try to find a generated stub. If that
// returns null, then find a dynamic stub.
Remote stub = getGeneratedStub(new QName(port.getName()), proxyInterface);
return stub != null ? stub : getPort(null, new QName(port.getName()), proxyInterface);
|
public java.rmi.Remote | getPort(java.lang.String endpoint, java.lang.Class proxyInterface)Return an object which acts as a dynamic proxy for the passed
interface class. This is a more "dynamic" version in that it
doesn't actually require WSDL, simply an endpoint address.
Note: Not part of the JAX-RPC spec.
return getPort(endpoint, null, proxyInterface);
|
private java.rmi.Remote | getPort(java.lang.String endpoint, javax.xml.namespace.QName portName, java.lang.Class proxyInterface)
if (!proxyInterface.isInterface()) {
throw new ServiceException(Messages.getMessage("mustBeIface00"));
}
if (!(Remote.class.isAssignableFrom(proxyInterface))) {
throw new ServiceException(
Messages.getMessage("mustExtendRemote00"));
}
// Validate the proxyInterface
if (wsdlParser != null) {
Port port = wsdlService.getPort(portName.getLocalPart());
if (port == null)
throw new ServiceException(Messages.getMessage("noPort00", "" + proxyInterface.getName()));
Binding binding = port.getBinding();
SymbolTable symbolTable = wsdlParser.getSymbolTable();
BindingEntry bEntry = symbolTable.getBindingEntry(binding.getQName());
if(bEntry.getParameters().size() != proxyInterface.getMethods().length) {
throw new ServiceException(Messages.getMessage("incompatibleSEI00", "" + proxyInterface.getName()));
}
// TODO: Check the methods and the parameters as well.
}
try {
Call call = null;
if (portName == null) {
call = (org.apache.axis.client.Call) createCall();
if (endpoint != null) {
call.setTargetEndpointAddress(new URL(endpoint));
}
} else {
call = (org.apache.axis.client.Call) createCall(portName);
}
ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
javax.xml.rpc.Stub stub = (javax.xml.rpc.Stub) Proxy.newProxyInstance(classLoader,
new Class[]{proxyInterface, javax.xml.rpc.Stub.class},
new AxisClientProxy(call, portName));
if(stub instanceof org.apache.axis.client.Stub){
((org.apache.axis.client.Stub) stub).setPortName(portName);
}
return (Remote) stub;
} catch (Exception e) {
throw new ServiceException(
Messages.getMessage("wsdlError00", "" + "", "\n" + e));
}
|
public java.util.Iterator | getPorts()Returns an Iterator for the list of
QName s of service endpoints grouped by this
service
if (wsdlService == null)
throw new ServiceException(Messages.getMessage("wsdlMissing00"));
if (wsdlService.getPorts() == null) {
// Return an empty iterator;
return new Vector().iterator();
}
Map portmap = wsdlService.getPorts();
List portlist = new java.util.ArrayList(portmap.size());
// we could simply iterate over keys instead and skip
// the lookup, but while keys are probably the same as
// port names, the documentation does not make any
// guarantee on this, so we'll just play it safe
// Aaron Hamid
Iterator portiterator = portmap.values().iterator();
while (portiterator.hasNext()) {
Port port = (Port) portiterator.next();
// maybe we should use Definition.getTargetNamespace() here,
// but this class does not hold a reference to the object,
// so we'll just use the namespace of the service's QName
// (it should all be the same wsdl targetnamespace value, right?)
// Aaron Hamid
portlist.add(new QName(wsdlService.getQName().getNamespaceURI(), port.getName()));
}
// ok, return the real list of QNames
return portlist.iterator();
|
public javax.naming.Reference | getReference()Returns a reference to this object.
String classname = this.getClass().getName();
Reference reference = new Reference(classname,
"org.apache.axis.client.ServiceFactory", null);
StringRefAddr addr = null;
if (!classname.equals("org.apache.axis.client.Service")) {
// This is a generated derived class. Don't bother with
// all the Service instance variables.
addr = new StringRefAddr(
ServiceFactory.SERVICE_CLASSNAME, classname);
reference.add(addr);
} else {
if (wsdlLocation != null) {
addr = new StringRefAddr(
ServiceFactory.WSDL_LOCATION, wsdlLocation.toString());
reference.add(addr);
}
QName serviceName = getServiceName();
if (serviceName != null) {
addr = new StringRefAddr(ServiceFactory.SERVICE_NAMESPACE,
serviceName.getNamespaceURI());
reference.add(addr);
addr = new StringRefAddr(ServiceFactory.SERVICE_LOCAL_PART,
serviceName.getLocalPart());
reference.add(addr);
}
}
if (maintainSession) {
addr = new StringRefAddr(ServiceFactory.MAINTAIN_SESSION, "true");
reference.add(addr);
}
return reference;
|
public javax.xml.namespace.QName | getServiceName()Returns the qualified name of the service (if one is set).
if (serviceName != null) return serviceName;
if (wsdlService == null) return (null);
QName qn = wsdlService.getQName();
return (new QName(qn.getNamespaceURI(), qn.getLocalPart()));
|
Transport | getTransportForURL(java.net.URL url)Get any registered Transport object for a given URL.
return (Transport) transportImpls.get(url.toString());
|
public javax.xml.rpc.encoding.TypeMappingRegistry | getTypeMappingRegistry()Returns the current TypeMappingRegistry or null.
return (engine.getTypeMappingRegistry());
|
public java.net.URL | getWSDLDocumentLocation()Returns the location of the WSDL document used to prefill the data
(if one was used at all).
try {
return new URL(wsdlLocation);
} catch (MalformedURLException e) {
return null;
}
|
public org.apache.axis.wsdl.gen.Parser | getWSDLParser()
return (wsdlParser);
|
protected javax.wsdl.Service | getWSDLService()
return (wsdlService);
|
private void | initService(java.lang.String url, javax.xml.namespace.QName serviceName)Common code for building up the Service from a WSDL document
try {
// Start by reading in the WSDL using Parser
Parser parser = new Parser();
parser.run(url);
if (cachingWSDL && this.wsdlLocation != null)
cachedWSDL.put(url, parser);
initService(parser, serviceName);
} catch (Exception exp) {
throw new ServiceException(
Messages.getMessage("wsdlError00", "" + "", "\n" + exp),
exp);
}
|
private void | initService(java.lang.String context, org.w3c.dom.Document doc, javax.xml.namespace.QName serviceName)Common code for building up the Service from a WSDL document
try {
// Start by reading in the WSDL using Parser
Parser parser = new Parser();
parser.run(context, doc);
initService(parser, serviceName);
} catch (Exception exp) {
throw new ServiceException(
Messages.getMessage("wsdlError00", "" + "", "\n" + exp));
}
|
private void | initService(org.apache.axis.wsdl.gen.Parser parser, javax.xml.namespace.QName serviceName)Code for building up the Service from a Parser
try {
this.wsdlParser = parser;
ServiceEntry serviceEntry = parser.getSymbolTable().getServiceEntry(serviceName);
if (serviceEntry != null)
this.wsdlService = serviceEntry.getService();
if (this.wsdlService == null)
throw new ServiceException(
Messages.getMessage("noService00", "" + serviceName));
} catch (Exception exp) {
throw new ServiceException(
Messages.getMessage("wsdlError00", "" + "", "\n" + exp));
}
|
void | registerTransportForURL(java.net.URL url, Transport transport)Register a Transport for a particular URL.
transportImpls.put(url.toString(), transport);
|
public void | setCacheWSDL(boolean flag)Allows users to turn caching of WSDL documents on or off.
Default is 'true' (on).
cachingWSDL = flag;
|
public void | setEngine(org.apache.axis.AxisEngine engine)Sets this Service's AxisEngine. This engine will be shared by all
Call objects created from this Service object.
Note: Not part of the JAX-RPC spec.
this.engine = engine;
|
public void | setEngineConfiguration(org.apache.axis.EngineConfiguration config)Set this Service's engine configuration.
Note that since all of the constructors create the AxisClient right
now, this is basically a no-op. Putting it in now so that we can make
lazy engine instantiation work, and not have to duplicate every single
Service constructor with a EngineConfiguration argument.
If you need to use a non-default EngineConfiguration , do
the following before calling the Service constructor:
AxisProperties.setProperty(EngineConfigurationFactory.SYSTEM_PROPERTY_NAME,
"classname.of.new.EngineConfigurationFactory");
Where the second parameter is the name of your new class that implements
EngineConfigurationFactory and a
public static EngineConfigurationFactory newFactory(Object param)
method. See EngineConfigurationFactoryDefault for an example
of how to do this.
This way, when the Service class constructor calls
EngineConfigurationFactoryFinder.newFactory().getClientEngineConfig()
the getClientEngineConfig() of your own EngineConfigurationFactory will be
called, and your configuration will be used in the constructed Service object.
Another way is to use the "discovery" method of
EngineConfigurationFactoryFinder .
this.config = config;
|
public void | setMaintainSession(boolean yesno)Determine whether we'd like to track sessions or not.
This information is passed to all Call objects created
from this service. Calling setMaintainSession will
only affect future instantiations of the Call object,
not those that already exist.
Note: Not part of JAX-RPC specification.
maintainSession = yesno;
|
public void | setTypeMappingRegistry(javax.xml.rpc.encoding.TypeMappingRegistry registry)Defines the current Type Mappig Registry.
|
public void | setTypeMappingVersion(java.lang.String version)Set the typemapping version
((TypeMappingRegistryImpl)getTypeMappingRegistry()).doRegisterFromVersion(version);
|