blob: 9f379f115e1e31347c5055d141061b8b53b82b98 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.axis2.client;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.axiom.soap.SOAPProcessingException;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.NamedValue;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.OutInAxisOperation;
import org.apache.axis2.description.OutOnlyAxisOperation;
import org.apache.axis2.description.RobustOutOnlyAxisOperation;
import org.apache.axis2.i18n.Messages;
import org.apache.axis2.transport.http.HTTPConstants;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Base class for generated client stubs. This defines several client API
* (<code>public</code>) methods shared between all types of stubs, along with
* some <code>protected</code> methods intended for use by the actual stub
* implementation code. The client API method names start with a leading
* underscore character to avoid conflicts with actual implementation methods.
*/
public abstract class Stub {
protected AxisService _service;
protected ArrayList modules = new ArrayList();
protected ServiceClient _serviceClient;
/**
* Get service client implementation used by this stub.
*
* @return service client
*/
public ServiceClient _getServiceClient() {
return _serviceClient;
}
/**
* Set service client implementation used by this stub. Once set, the
* service client is owned by this stub and will automatically be removed
* from the configuration when use of the stub is done.
*
* @param _serviceClient
*/
public void _setServiceClient(ServiceClient _serviceClient) {
this._serviceClient = _serviceClient;
}
/**
* Create a SOAP message envelope using the supplied options.
* TODO generated stub code should use this method, or similar method taking
* an operation client
*
* @param options
* @return generated
* @throws SOAPProcessingException
*/
protected static SOAPEnvelope createEnvelope(Options options) throws SOAPProcessingException {
return getFactory(options.getSoapVersionURI()).getDefaultEnvelope();
}
/**
* Get Axiom factory appropriate to selected SOAP version.
*
* @param soapVersionURI
* @return factory
*/
protected static SOAPFactory getFactory(String soapVersionURI) {
if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(soapVersionURI)) {
return OMAbstractFactory.getSOAP11Factory();
} else if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(soapVersionURI)) {
return OMAbstractFactory.getSOAP12Factory();
} else {
throw new RuntimeException(Messages
.getMessage("unknownsoapversion"));
}
}
/**
* Finalize method called by garbage collection. This is overridden to
* support cleanup of any associated resources.
*
* @throws Throwable
*/
protected void finalize() throws Throwable {
super.finalize();
cleanup();
}
/**
* Cleanup associated resources. This removes the axis service from the
* configuration.
*
* @throws AxisFault
*/
public void cleanup() throws AxisFault {
// service is removed from the service client it self.
_serviceClient.cleanup();
}
/**
* sets the epr of the service client to given value
*
* @param address
*/
protected void setServiceClientEPR(String address) {
EndpointReference toEPRFromServiceClient = _serviceClient.getOptions().getTo();
toEPRFromServiceClient.setAddress(address);
}
/**
* add an http header with name and value to message context
*
* @param messageContext
* @param name
* @param value
*/
protected void addHttpHeader(MessageContext messageContext,
String name,
String value) {
java.lang.Object headersObj = messageContext.getProperty(HTTPConstants.HTTP_HEADERS);
if (headersObj == null) {
headersObj = new java.util.ArrayList();
}
java.util.List headers = (java.util.List) headersObj;
NamedValue nameValue = new NamedValue(name , value);
headers.add(nameValue);
messageContext.setProperty(HTTPConstants.HTTP_HEADERS, headers);
}
/**
* sets the propertykey and propertyValue as a pair to operation client
*
* @param operationClient
* @param propertyKey
* @param propertyValue
*/
protected void addPropertyToOperationClient(OperationClient operationClient,
String propertyKey,
Object propertyValue) {
operationClient.getOptions().setProperty(propertyKey, propertyValue);
}
protected void addPropertyToOperationClient(OperationClient operationClient,
String propertyKey,
boolean value) {
addPropertyToOperationClient(operationClient, propertyKey, new Boolean(value));
}
protected void addPropertyToOperationClient(OperationClient operationClient,
String propertyKey,
int value) {
addPropertyToOperationClient(operationClient, propertyKey, new Integer(value));
}
protected void setMustUnderstand(OMElement headerElement, OMNamespace omNamespace) {
OMFactory omFactory = OMAbstractFactory.getOMFactory();
OMAttribute mustUnderstandAttribute =
omFactory.createOMAttribute(SOAP12Constants.ATTR_MUSTUNDERSTAND, omNamespace,
"true");
headerElement.addAttribute(mustUnderstandAttribute);
}
protected void addHeader(OMElement omElementToadd,
SOAPEnvelope envelop,
boolean mustUnderstand){
SOAPHeaderBlock soapHeaderBlock =
envelop.getHeader().addHeaderBlock(omElementToadd.getLocalName(),omElementToadd.getNamespace());
soapHeaderBlock.setMustUnderstand(mustUnderstand);
OMNode omNode = null;
// add child elements
for (Iterator iter = omElementToadd.getChildren(); iter.hasNext();){
omNode = (OMNode) iter.next();
iter.remove();
soapHeaderBlock.addChild(omNode);
}
OMAttribute omatribute = null;
// add attributes
for (Iterator iter = omElementToadd.getAllAttributes(); iter.hasNext();){
omatribute = (OMAttribute) iter.next();
soapHeaderBlock.addAttribute(omatribute);
}
}
protected void addHeader(OMElement omElementToadd,
SOAPEnvelope envelop){
addHeader(omElementToadd,envelop,false);
}
protected void addAnonymousOperations(){
RobustOutOnlyAxisOperation robustoutoonlyOperation =
new RobustOutOnlyAxisOperation(ServiceClient.ANON_ROBUST_OUT_ONLY_OP);
_service.addOperation(robustoutoonlyOperation);
OutOnlyAxisOperation outOnlyOperation = new OutOnlyAxisOperation(ServiceClient.ANON_OUT_ONLY_OP);
_service.addOperation(outOnlyOperation);
OutInAxisOperation outInOperation = new OutInAxisOperation(ServiceClient.ANON_OUT_IN_OP);
_service.addOperation(outInOperation);
}
}