Fields Summary |
---|
private org.apache.axis.encoding.TypeMappingRegistry | tmr |
private Vector | faultFlows |
private Vector | typeMappings |
private Vector | operations |
private Vector | namespacesWhich namespaces should auto-dispatch to this service? |
private List | rolesWhich roles does this service support? |
private String | descriptionURL |
private org.apache.axis.constants.Style | styleStyle - document, wrapped, message, or RPC (the default) |
private org.apache.axis.constants.Use | useUse - encoded (the default) or literal |
private transient org.apache.axis.handlers.soap.SOAPService | cachedService |
private QName | providerQNameOur provider - used to figure out which Handler we use as a service
pivot (see getInstance() below) |
private WSDDJAXRPCHandlerInfoChain | _wsddHIchain |
org.apache.axis.description.JavaServiceDesc | desc |
private boolean | streamingIs streaming (i.e. NO high-fidelity recording, deserialize on the fly)
on for this service? |
private int | sendTypeWhat attachment format should be used? |
Methods Summary |
---|
public void | addOperation(WSDDOperation operation)Add a WSDDOperation to the Service.
operations.add(operation);
desc.addOperationDesc(operation.getOperationDesc());
|
public void | addTypeMapping(WSDDTypeMapping mapping)Add a WSDDTypeMapping to the Service.
typeMappings.add(mapping);
|
private void | createTMR()
tmr = new TypeMappingRegistryImpl(false);
String version = getParameter("typeMappingVersion");
((TypeMappingRegistryImpl)tmr).doRegisterFromVersion(version);
|
public void | deployToRegistry(WSDDDeployment registry)
registry.addService(this);
// Register the name of the service as a valid namespace, just for
// backwards compatibility
registry.registerNamespaceForService(getQName().getLocalPart(), this);
for (int i = 0; i < namespaces.size(); i++) {
String namespace = (String) namespaces.elementAt(i);
registry.registerNamespaceForService(namespace, this);
}
super.deployToRegistry(registry);
|
public void | deployTypeMapping(WSDDTypeMapping mapping)
if (!typeMappings.contains(mapping)) {
typeMappings.add(mapping);
}
if (tmr == null) {
createTMR();
}
try {
// Get the encoding style from the mapping, if it isn't set
// use the use of the service to map doc/lit or rpc/enc
String encodingStyle = mapping.getEncodingStyle();
if (encodingStyle == null) {
encodingStyle = use.getEncoding();
}
TypeMapping tm = tmr.getOrMakeTypeMapping(encodingStyle);
desc.setTypeMappingRegistry(tmr);
desc.setTypeMapping(tm);
SerializerFactory ser = null;
DeserializerFactory deser = null;
// Try to construct a serializerFactory by introspecting for the
// following:
// public static create(Class javaType, QName xmlType)
// public <constructor>(Class javaType, QName xmlType)
// public <constructor>()
//
// The BaseSerializerFactory createFactory() method is a utility
// that does this for us.
if (mapping.getSerializerName() != null &&
!mapping.getSerializerName().equals("")) {
ser = BaseSerializerFactory.createFactory(mapping.getSerializer(),
mapping.getLanguageSpecificType(),
mapping.getQName());
}
if (mapping instanceof WSDDArrayMapping && ser instanceof ArraySerializerFactory) {
WSDDArrayMapping am = (WSDDArrayMapping) mapping;
ArraySerializerFactory factory = (ArraySerializerFactory) ser;
factory.setComponentType(am.getInnerType());
}
if (mapping.getDeserializerName() != null &&
!mapping.getDeserializerName().equals("")) {
deser = BaseDeserializerFactory.createFactory(mapping.getDeserializer(),
mapping.getLanguageSpecificType(),
mapping.getQName());
}
tm.register( mapping.getLanguageSpecificType(), mapping.getQName(), ser, deser);
} catch (ClassNotFoundException e) {
log.error(Messages.getMessage("unabletoDeployTypemapping00", mapping.getQName().toString()), e);
throw new WSDDNonFatalException(e);
} catch (Exception e) {
throw new WSDDException(e);
}
|
protected javax.xml.namespace.QName | getElementName()
return QNAME_SERVICE;
|
public WSDDFaultFlow | getFaultFlow(javax.xml.namespace.QName name)
WSDDFaultFlow[] t = getFaultFlows();
for (int n = 0; n < t.length; n++) {
if (t[n].getQName().equals(name)) {
return t[n];
}
}
return null;
|
public WSDDFaultFlow[] | getFaultFlows()
WSDDFaultFlow[] t = new WSDDFaultFlow[faultFlows.size()];
faultFlows.toArray(t);
return t;
|
public WSDDJAXRPCHandlerInfoChain | getHandlerInfoChain()
return _wsddHIchain;
|
public java.util.Vector | getNamespaces()Obtain the list of namespaces registered for this service
return namespaces;
|
public javax.xml.namespace.QName | getProviderQName()
return providerQName;
|
public org.apache.axis.description.ServiceDesc | getServiceDesc()
return desc;
|
public java.lang.String | getServiceDescriptionURL()Get any service description URL which might be associated with this
service.
return descriptionURL;
|
public org.apache.axis.constants.Style | getStyle()Get the service style - document or RPC
return style;
|
public org.apache.axis.encoding.TypeMapping | getTypeMapping(java.lang.String encodingStyle)
// If type mapping registry not initialized yet, return null.
if (tmr == null) {
return null;
}
return (TypeMapping) tmr.getOrMakeTypeMapping(encodingStyle);
|
public java.util.Vector | getTypeMappings()
return typeMappings;
|
public org.apache.axis.constants.Use | getUse()Get the service use - literal or encoded
return use;
|
protected void | initTMR()Initialize a TypeMappingRegistry with the
WSDDTypeMappings.
Note: Extensions of WSDDService may override
initTMR to popluate the tmr with different
type mappings.
// If not created, construct a tmr
// and populate it with the type mappings.
if (tmr == null) {
createTMR();
for (int i=0; i<typeMappings.size(); i++) {
deployTypeMapping((WSDDTypeMapping)
typeMappings.get(i));
}
}
|
public org.apache.axis.Handler | makeNewInstance(org.apache.axis.EngineConfiguration registry)
if (cachedService != null) {
return cachedService;
}
// Make sure tmr is initialized.
initTMR();
Handler reqHandler = null;
WSDDChain request = getRequestFlow();
if (request != null) {
reqHandler = request.getInstance(registry);
}
Handler providerHandler = null;
if (providerQName != null) {
try {
providerHandler = WSDDProvider.getInstance(providerQName,
this,
registry);
} catch (Exception e) {
throw new ConfigurationException(e);
}
if (providerHandler == null)
throw new WSDDException(
Messages.getMessage("couldntConstructProvider00"));
}
Handler respHandler = null;
WSDDChain response = getResponseFlow();
if (response != null) {
respHandler = response.getInstance(registry);
}
SOAPService service = new SOAPService(reqHandler, providerHandler,
respHandler);
service.setStyle(style);
service.setUse(use);
service.setServiceDescription(desc);
service.setHighFidelityRecording(!streaming);
service.setSendType(sendType);
if ( getQName() != null )
service.setName(getQName().getLocalPart());
service.setOptions(getParametersTable());
service.setRoles(roles);
service.setEngine(((WSDDDeployment)registry).getEngine());
if (use != Use.ENCODED) {
// If not encoded, turn off multi-refs and prefer
// not to sent xsi:type and xsi:nil
service.setOption(AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
service.setOption(AxisEngine.PROP_SEND_XSI, Boolean.FALSE);
}
// Set handlerInfoChain
if (_wsddHIchain != null) {
HandlerInfoChainFactory hiChainFactory = _wsddHIchain.getHandlerChainFactory();
service.setOption(Constants.ATTR_HANDLERINFOCHAIN, hiChainFactory);
}
AxisEngine.normaliseOptions(service);
WSDDFaultFlow [] faultFlows = getFaultFlows();
if (faultFlows != null && faultFlows.length > 0) {
FaultableHandler wrapper = new FaultableHandler(service);
for (int i = 0; i < faultFlows.length; i++) {
WSDDFaultFlow flow = faultFlows[i];
Handler faultHandler = flow.getInstance(registry);
wrapper.setOption("fault-" + flow.getQName().getLocalPart(),
faultHandler);
}
}
try {
service.getInitializedServiceDesc(MessageContext.getCurrentContext());
} catch (AxisFault axisFault) {
throw new ConfigurationException(axisFault);
}
cachedService = service;
return service;
|
public void | removeNamespaceMappings(WSDDDeployment registry)
for (int i = 0; i < namespaces.size(); i++) {
String namespace = (String) namespaces.elementAt(i);
registry.removeNamespaceMapping(namespace);
}
registry.removeNamespaceMapping(getQName().getLocalPart());
|
public void | setCachedService(org.apache.axis.handlers.soap.SOAPService service)
cachedService = service;
|
public void | setHandlerInfoChain(WSDDJAXRPCHandlerInfoChain hichain)
_wsddHIchain = hichain;
|
public void | setProviderQName(javax.xml.namespace.QName providerQName)
this.providerQName = providerQName;
|
public void | setServiceDescriptionURL(java.lang.String sdUrl)Set the service description URL for this service.
descriptionURL = sdUrl;
|
public void | setStyle(org.apache.axis.constants.Style style)Set the service style - document or RPC
this.style = style;
|
public void | setTypeMappings(java.util.Vector typeMappings)
this.typeMappings = typeMappings;
|
public void | setUse(org.apache.axis.constants.Use use)Set the service use - literal or encoded
this.use = use;
|
public void | validateDescriptors()This method can be used for dynamic deployment using new WSDDService()
etc. It validates some standard parameters for some standard providers
(if present). Do this before deployment.deployService().
if (tmr == null) {
initTMR();
}
desc.setTypeMappingRegistry(tmr);
desc.setTypeMapping(getTypeMapping(desc.getUse().getEncoding()));
String allowedMethods = getParameter(JavaProvider.OPTION_ALLOWEDMETHODS);
if (allowedMethods != null && !"*".equals(allowedMethods)) {
ArrayList methodList = new ArrayList();
StringTokenizer tokenizer = new StringTokenizer(allowedMethods, " ,");
while (tokenizer.hasMoreTokens()) {
methodList.add(tokenizer.nextToken());
}
desc.setAllowedMethods(methodList);
}
|
public void | writeToContext(org.apache.axis.encoding.SerializationContext context)Write this element out to a SerializationContext
AttributesImpl attrs = new AttributesImpl();
QName name = getQName();
if (name != null) {
attrs.addAttribute("", ATTR_NAME, ATTR_NAME,
"CDATA", context.qName2String(name));
}
if (providerQName != null) {
attrs.addAttribute("", ATTR_PROVIDER, ATTR_PROVIDER,
"CDATA", context.qName2String(providerQName));
}
if (style != Style.DEFAULT) {
attrs.addAttribute("", ATTR_STYLE, ATTR_STYLE,
"CDATA", style.getName());
}
if (use != Use.DEFAULT) {
attrs.addAttribute("", ATTR_USE, ATTR_USE,
"CDATA", use.getName());
}
if (streaming) {
attrs.addAttribute("", ATTR_STREAMING, ATTR_STREAMING,
"CDATA", "on");
}
if (sendType != Attachments.SEND_TYPE_NOTSET) {
attrs.addAttribute("", ATTR_ATTACHMENT_FORMAT,
ATTR_ATTACHMENT_FORMAT, "CDATA",
AttachmentsImpl.getSendTypeString(sendType));
}
context.startElement(WSDDConstants.QNAME_SERVICE, attrs);
if (desc.getWSDLFile() != null) {
context.startElement(QNAME_WSDLFILE, null);
context.writeSafeString(desc.getWSDLFile());
context.endElement();
}
if (desc.getDocumentation() != null) {
WSDDDocumentation documentation = new WSDDDocumentation(desc.getDocumentation());
documentation.writeToContext(context);
}
for (int i = 0; i < operations.size(); i++) {
WSDDOperation operation = (WSDDOperation) operations.elementAt(i);
operation.writeToContext(context);
}
writeFlowsToContext(context);
writeParamsToContext(context);
for (int i=0; i < typeMappings.size(); i++) {
((WSDDTypeMapping) typeMappings.elementAt(i)).writeToContext(context);
}
for (int i=0; i < namespaces.size(); i++ ) {
context.startElement(QNAME_NAMESPACE, null);
context.writeString((String)namespaces.get(i));
context.endElement();
}
String endpointURL = desc.getEndpointURL();
if (endpointURL != null) {
context.startElement(QNAME_ENDPOINTURL, null);
context.writeSafeString(endpointURL);
context.endElement();
}
if (_wsddHIchain != null) {
_wsddHIchain.writeToContext(context);
}
context.endElement();
|