| /* |
| * 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); |
| } |
| |
| } |