axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From antel...@apache.org
Subject cvs commit: xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis WSIFOperation_ApacheAxis.java
Date Mon, 02 Dec 2002 13:26:38 GMT
antelder    2002/12/02 05:26:38

  Modified:    java/src/org/apache/wsif/providers/soap/apacheaxis
                        WSIFOperation_ApacheAxis.java
  Log:
  Phase 2 of tidying up the AXIS provider
  
  Revision  Changes    Path
  1.38      +539 -88   xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFOperation_ApacheAxis.java
  
  Index: WSIFOperation_ApacheAxis.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFOperation_ApacheAxis.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- WSIFOperation_ApacheAxis.java	28 Nov 2002 14:26:57 -0000	1.37
  +++ WSIFOperation_ApacheAxis.java	2 Dec 2002 13:26:38 -0000	1.38
  @@ -73,13 +73,25 @@
   import javax.mail.MessagingException;
   import javax.mail.internet.MimeMultipart;
   import javax.swing.ImageIcon;
  +import javax.wsdl.Binding;
  +import javax.wsdl.BindingFault;
  +import javax.wsdl.BindingInput;
  +import javax.wsdl.BindingOperation;
  +import javax.wsdl.BindingOutput;
   import javax.wsdl.Definition;
   import javax.wsdl.Input;
   import javax.wsdl.Operation;
   import javax.wsdl.Output;
   import javax.wsdl.Part;
  +import javax.wsdl.extensions.mime.MIMEContent;
  +import javax.wsdl.extensions.mime.MIMEMimeXml;
  +import javax.wsdl.extensions.mime.MIMEMultipartRelated;
  +import javax.wsdl.extensions.mime.MIMEPart;
  +import javax.wsdl.extensions.soap.SOAPBody;
  +import javax.wsdl.extensions.soap.SOAPFault;
  +import javax.wsdl.extensions.soap.SOAPHeader;
  +import javax.wsdl.extensions.soap.SOAPOperation;
   import javax.xml.namespace.QName;
  -import javax.xml.rpc.ParameterMode;
   import javax.xml.soap.AttachmentPart;
   import javax.xml.soap.SOAPException;
   import javax.xml.transform.Source;
  @@ -94,8 +106,12 @@
   import org.apache.axis.client.Call;
   import org.apache.axis.client.Service;
   import org.apache.axis.client.Transport;
  +import org.apache.axis.encoding.DeserializerFactory;
  +import org.apache.axis.encoding.SerializerFactory;
   import org.apache.axis.encoding.TypeMapping;
   import org.apache.axis.encoding.TypeMappingRegistry;
  +import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
  +import org.apache.axis.encoding.ser.ArraySerializerFactory;
   import org.apache.axis.encoding.ser.BeanDeserializerFactory;
   import org.apache.axis.encoding.ser.BeanSerializerFactory;
   import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
  @@ -118,8 +134,12 @@
   import org.apache.wsif.providers.WSIFDynamicTypeMapping;
   import org.apache.wsif.util.WSIFUtils;
   import org.apache.wsif.util.jms.WSIFJMSDestination;
  +import org.apache.wsif.wsdl.extensions.jms.JMSProperty;
  +import org.apache.wsif.wsdl.extensions.jms.JMSPropertyValue;
   import org.w3c.dom.Element;
   
  +import com.ibm.wsdl.extensions.mime.MIMEConstants;
  +
   /**
    * @author Mark Whitlock <whitlock@apache.org>
    * @author Ant Elder <ant.elder@uk.ibm.com>
  @@ -128,14 +148,14 @@
   
   	private static final long serialVersionUID = 1L;
   		
  -	transient protected WSIFPort_ApacheAxis portInstance;
  -	transient protected Operation operation;
  -	transient protected Definition definition;
  +	transient protected WSIFPort_ApacheAxis wsifPort;
  +	transient protected Operation portTypeOperation;
  +    transient protected SOAPOperation soapOperation;
       transient protected List soapPartNames;
       transient protected List mimePartNames;
   	transient protected String inputEncodingStyle;
   	transient protected String inputNamespace;
  -	transient protected String actionUri;
  +	transient protected String soapActionURI;
   	transient protected HashMap outParams;
   
   	// for async operation
  @@ -144,10 +164,10 @@
   
   	// everything other than what is needed to process async response should be transient
   	protected WSIFResponseHandler responseHandler;
  -	protected String returnName = null;
  +	protected String returnName;
   	protected String outputEncodingStyle;
   	protected WSIFDynamicTypeMap typeMap;
  -	protected String style;
  +	protected String operationStyle;
   
   	transient protected String[] inputPartNames;
   	transient protected QName[] inputPartQNs;
  @@ -159,24 +179,404 @@
   	protected Class[] outputPartTypes;
   	protected QName[] outputPartTypeQNs;
   	protected int returnPartIndex;
  -
  +	
   	public WSIFOperation_ApacheAxis(
  -		WSIFPort_ApacheAxis wsifport_apacheaxis,
  -		Operation operation1,
  +		WSIFPort_ApacheAxis wsifPort,
  +		Operation portTypeOperation,
   		WSIFDynamicTypeMap wsifdynamictypemap)
   		throws WSIFException {
  -		Trc.entry(this, wsifport_apacheaxis, operation1, wsifdynamictypemap);
  +		Trc.entry(this, wsifPort, portTypeOperation, wsifdynamictypemap);
  +
  +		this.wsifPort = wsifPort;
  +		this.portTypeOperation = portTypeOperation;
  +		this.typeMap = wsifdynamictypemap;
  +		
  +		BindingOperation bindingOperation =
  +		   getBindingOperation(portTypeOperation);
  +
  +        initialiseSoapOperation(bindingOperation);
  +        initialiseBindingInput(bindingOperation);
  +        initialiseBindingOutput(bindingOperation);
  +
  +		this.inputEncodingStyle = WSIFAXISConstants.DEFAULT_SOAP_ENCODING_URI;
  +		this.outputEncodingStyle = WSIFAXISConstants.DEFAULT_SOAP_ENCODING_URI;
  +
  +//TODO???
  +//		QName bindingQN = wsifPort.getBindingName();
  +//		if (bindingQN != null) {
  +//		   this.inputNamespace = bindingQN.getNamespaceURI();
  +//		}
  +
  +		addInputJmsPropertyValues(
  +		   wsifPort.getJmsAddressPropVals());
   
  -		inputEncodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
  -		outputEncodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
  -		typeMap = wsifdynamictypemap;
  -		setDynamicWSIFPort(wsifport_apacheaxis);
  -		setOperation(operation1);
  -		setDefinition(wsifport_apacheaxis.getDefinition());
   		if (Trc.ON)
   			Trc.exit(deep());
   	}
   
  +    /**
  +     * Initialises instance variables relating to the WSDL soapOperation element
  +     * The WSDL has the form: 
  +     *    <soap:operation soapAction="uri"? style="rpc|document"?>?
  +     */
  +    private void initialiseSoapOperation(BindingOperation bindingOperation) throws WSIFException
{
  +
  +		this.soapOperation = 
  +		   wsifPort.getSOAPOperation(bindingOperation);
  +		this.soapActionURI = soapOperation.getSoapActionURI();
  +		this.operationStyle = soapOperation.getStyle();
  +
  +		if (operationStyle == null || operationStyle.length() < 1 ) {
  +			operationStyle = wsifPort.getBindingStyle();
  +		} else if (!WSIFAXISConstants.VALID_STYLES.contains(operationStyle)) {
  +		      throw new WSIFException(
  +			     "unsupported style " + operationStyle + " for operation " + portTypeOperation.getName());
  +		}
  +		
  +		if (operationStyle == null || operationStyle.length() < 1 ) {
  +			throw new WSIFException(
  +				"no style specified on either soap:binding or soap:operation" );
  +		}
  +    }
  +
  +    private void initialiseBindingInput(BindingOperation bindingoperation) throws WSIFException
{
  +			BindingInput bindinginput = bindingoperation.getBindingInput();
  +			List inExtElems = bindinginput.getExtensibilityElements();
  +			SOAPBody inSoapBody =
  +				(SOAPBody) wsifPort.getExtElem(bindinginput,
  +					javax.wsdl.extensions.soap.SOAPBody.class,
  +					inExtElems);
  +			if (inSoapBody != null) {
  +				List list2 =
  +					parseSoapBody(
  +						soapOperation,
  +						inSoapBody,
  +						true);
  +				setSoapPartNames(list2);
  +			}
  +
  +			MIMEMultipartRelated inMimeMultipart =
  +				(MIMEMultipartRelated) wsifPort.getExtElem(bindinginput,
  +					MIMEMultipartRelated.class,
  +					inExtElems);
  +			if (inSoapBody != null && inMimeMultipart != null)
  +				throw new WSIFException(
  +					"In a binding operation that contains a mime:multipartRelated, "
  +						+ "a soap:body was found that was not in a mime:part. "
  +						+ "OperationName="
  +						+ getOperationName());
  +			if (inMimeMultipart != null)
  +				parseMimeMultipart(
  +					inMimeMultipart,
  +					bindingoperation,
  +					soapOperation,
  +					true,
  +					getOperationName());
  +
  +			MIMEMimeXml inMimeMimeXml =
  +				(MIMEMimeXml) wsifPort.getExtElem(bindinginput,
  +					MIMEMimeXml.class,
  +					inExtElems);
  +			if (inMimeMimeXml != null)
  +				throw new WSIFException(
  +					"WSIF does not support mime:mimeXml. Operation=" + getOperationName());
  +
  +			SOAPHeader soapheader =
  +				(SOAPHeader) wsifPort.getExtElem(bindinginput,
  +					javax.wsdl.extensions.soap.SOAPHeader.class,
  +					bindinginput.getExtensibilityElements());
  +			if (soapheader != null)
  +				throw new WSIFException(
  +					"not supported input soap:header " + soapheader);
  +
  +			List inJmsProps =
  +				wsifPort.getExtElems(
  +					bindinginput,
  +					JMSProperty.class,
  +					bindinginput.getExtensibilityElements());
  +			if (inJmsProps != null && inJmsProps.size() > 0) {
  +				if (wsifPort.isTransportJMS())
  +					setInputJmsProperties(inJmsProps);
  +				else
  +					throw new WSIFException("jms:properties found in non-jms binding");
  +			}
  +
  +			List inJmsPropVals =
  +				wsifPort.getExtElems(
  +					bindinginput,
  +					JMSPropertyValue.class,
  +					bindinginput.getExtensibilityElements());
  +			if (inJmsPropVals != null && inJmsPropVals.size() > 0) {
  +				if (wsifPort.isTransportJMS())
  +					addInputJmsPropertyValues(
  +						inJmsPropVals);
  +				else
  +					throw new WSIFException("jms:propertyValue found in non-jms binding");
  +			}
  +    }
  +
  +    private void initialiseBindingOutput(BindingOperation bindingoperation) throws WSIFException
{
  +			BindingOutput bindingoutput = bindingoperation.getBindingOutput();
  +			if (bindingoutput != null) {
  +				List outExtElems = bindingoutput.getExtensibilityElements();
  +				SOAPBody outSoapBody =
  +					(SOAPBody) wsifPort.getExtElem(bindingoutput,
  +						javax.wsdl.extensions.soap.SOAPBody.class,
  +						outExtElems);
  +				if (outSoapBody != null) {
  +					List list3 =
  +						parseSoapBody(
  +							soapOperation,
  +							outSoapBody,
  +							false);
  +					if (list3 != null && list3.size() > 0)
  +						setReturnName(
  +							(String) list3.get(0));
  +				}
  +
  +				MIMEMultipartRelated outMimeMultipart =
  +					(MIMEMultipartRelated) wsifPort.getExtElem(bindingoutput,
  +						MIMEMultipartRelated.class,
  +						outExtElems);
  +				if (outSoapBody != null && outMimeMultipart != null)
  +					throw new WSIFException(
  +						"In a binding operation that contains a mime:multipartRelated, "
  +							+ "a soap:body was found that was not in a mime:part. "
  +							+ "OperationName="
  +							+ getOperationName());
  +				if (outMimeMultipart != null)
  +					parseMimeMultipart(
  +						outMimeMultipart,
  +						bindingoperation,
  +						soapOperation,
  +						false,
  +						getOperationName());
  +
  +				MIMEMimeXml outMimeMimeXml =
  +					(MIMEMimeXml) wsifPort.getExtElem(bindingoutput,
  +						MIMEMimeXml.class,
  +						outExtElems);
  +				if (outMimeMimeXml != null)
  +					throw new WSIFException(
  +						"WSIF does not support mime:mimeXml. Operation="
  +							+ getOperationName());
  +
  +  			    SOAPHeader soapheader =
  +					(SOAPHeader) wsifPort.getExtElem(bindingoutput,
  +						javax.wsdl.extensions.soap.SOAPHeader.class,
  +						outExtElems);
  +				if (soapheader != null)
  +					throw new WSIFException(
  +						"not supported output soap:header " + soapheader);
  +				for (Iterator iterator1 =
  +					bindingoperation.getBindingFaults().values().iterator();
  +					iterator1.hasNext();
  +					) {
  +					BindingFault bindingfault = (BindingFault) iterator1.next();
  +					SOAPFault soapfault =
  +						(SOAPFault) wsifPort.getExtElem(bindingfault,
  +							javax.wsdl.extensions.soap.SOAPFault.class,
  +							bindingfault.getExtensibilityElements());
  +				}
  +				List outJmsProps =
  +					wsifPort.getExtElems(bindingoutput, JMSProperty.class, outExtElems);
  +				if (outJmsProps != null && outJmsProps.size() > 0) {
  +					if (wsifPort.isTransportJMS())
  +						setOutputJmsProperties(
  +							outJmsProps);
  +					else
  +						throw new WSIFException("jms:properties found in non-jms binding");
  +				}
  +			}
  +    }
  +
  +	private List parseSoapBody(
  +		SOAPOperation soapoperation,
  +		SOAPBody soapbody,
  +		boolean isInput)
  +		throws WSIFException {
  +
  +		Trc.entry(this, soapoperation, soapbody, new Boolean(isInput));
  +
  +		if (isInput) {
  +			String ns = soapbody.getNamespaceURI();
  +			if (ns != null) {
  +				setInputNamespace(soapbody.getNamespaceURI());
  +			}
  +		}
  +
  +		String use = soapbody.getUse();
  +		if (!WSIFAXISConstants.VALID_USES.contains(use)) {
  +			throw new WSIFException(
  +				"unsupported use " + use + " in " + soapoperation);
  +		}
  +
  +		if (isInput) {
  +			List list1 = soapbody.getEncodingStyles();
  +			if (list1 != null && list1.size() > 0)
  +				setInputEncodingStyle((String) list1.get(0));
  +		}
  +
  +		List list2 = soapbody.getParts();
  +		Trc.exit(list2);
  +		return list2;
  +	}
  +
  +	private void parseMimeMultipart(
  +		MIMEMultipartRelated mimeMultipart,
  +		BindingOperation bindingoperation,
  +		SOAPOperation soapoperation,
  +		boolean isInput,
  +		String operationName)
  +		throws WSIFException {
  +
  +		Trc.entry(
  +			this,
  +			mimeMultipart,
  +			bindingoperation,
  +			soapoperation);
  +
  +		Vector mimePartNames = new Vector();
  +		boolean soapBodyFound = false;
  +		Operation op = bindingoperation.getOperation();
  +		Map mapInParts = op.getInput().getMessage().getParts();
  +		Map mapOutParts =
  +			op.getOutput() == null
  +				? new HashMap()
  +				: op.getOutput().getMessage().getParts();
  +
  +		List mimeParts = mimeMultipart.getMIMEParts();
  +		Iterator mimePartIt = mimeParts.iterator();
  +		while (mimePartIt.hasNext()) {
  +			Object nextMimePart = mimePartIt.next();
  +			if (nextMimePart instanceof MIMEPart) {
  +				MIMEPart mimePart = (MIMEPart) nextMimePart;
  +				if (!MIMEConstants
  +					.NS_URI_MIME
  +					.equals(mimePart.getElementType().getNamespaceURI()))
  +					throw new WSIFException(
  +						"A MIME part in binding operation "
  +							+ bindingoperation.getName()
  +							+ " did not have the correct namespace URI of "
  +							+ MIMEConstants.NS_URI_MIME
  +							+ ".");
  +
  +				boolean containsSoapBody = false;
  +				boolean containsMimeContent = false;
  +				List mimePartChildren = mimePart.getExtensibilityElements();
  +				Iterator mimePartChildrenIt = mimePartChildren.iterator();
  +				while (mimePartChildrenIt.hasNext()) {
  +					Object nextChild = mimePartChildrenIt.next();
  +					if (nextChild instanceof MIMEContent) {
  +						MIMEContent mimeContent = (MIMEContent) nextChild;
  +						if (!MIMEConstants
  +							.NS_URI_MIME
  +							.equals(
  +								mimePart.getElementType().getNamespaceURI()))
  +							throw new WSIFException(
  +								"A MIME part in binding operation "
  +									+ bindingoperation.getName()
  +									+ " did not have the correct namespace URI of "
  +									+ MIMEConstants.NS_URI_MIME
  +									+ ".");
  +						containsMimeContent = true;
  +						if (containsSoapBody)
  +							throw new WSIFException(
  +								"A mime:part that contains a mime:content also "
  +									+ "contains a soap:body. Operation="
  +									+ operationName);
  +
  +						String partName = mimeContent.getPart();
  +						if (partName == null || partName.length() == 0)
  +							throw new WSIFException(
  +								"No part name for a mime:content. Operation="
  +									+ operationName);
  +
  +						if ((isInput && mapInParts.get(partName) == null)
  +							|| (!isInput && mapOutParts.get(partName) == null))
  +							throw new WSIFException(
  +								"The part specified in a mime:content does "
  +									+ "not exist in the operation. Operation="
  +									+ operationName
  +									+ " Part="
  +									+ partName);
  +
  +						mimePartNames.addElement(partName);
  +
  +					} else if (nextChild instanceof SOAPBody) {
  +						if (soapBodyFound)
  +							throw new WSIFException(
  +								"Multiple soap:body tags found in a "
  +									+ "mime:multipartRelated. Operation="
  +									+ operationName);
  +						soapBodyFound = true;
  +						containsSoapBody = true;
  +						if (containsMimeContent)
  +							throw new WSIFException(
  +								"A mime:part that contains a mime:content also "
  +									+ "contains a soap:body. Operation="
  +									+ operationName);
  +
  +						List soapPartNameList =
  +							parseSoapBody(
  +								soapoperation,
  +								(SOAPBody) nextChild,
  +								isInput);
  +
  +						if (isInput)
  +							setSoapPartNames(soapPartNameList);
  +						else if (
  +							soapPartNameList != null
  +								&& soapPartNameList.size() > 0)
  +							setReturnName(
  +								(String) soapPartNameList.get(0));
  +					} else if (nextChild instanceof MIMEMultipartRelated) {
  +						throw new WSIFException(
  +							"WSIF does not support nesting mime:multipartRelated "
  +								+ "inside a mime:part. Operation="
  +								+ operationName);
  +					} else if (nextChild instanceof MIMEMimeXml) {
  +						throw new WSIFException(
  +							"WSIF does not support mime:mimeXml. Operation="
  +								+ operationName);
  +					}
  +				}
  +			}
  +		}
  +
  +		if (!soapBodyFound)
  +			throw new WSIFException(
  +				"No soap:body found in a mime:multipartRelated. Operation="
  +					+ operationName);
  +
  +		if (mimePartNames != null && !mimePartNames.isEmpty()) {
  +			List oldMimePartNames = getMimePartNames();
  +			if (oldMimePartNames == null || oldMimePartNames.isEmpty())
  +				setMimePartNames(mimePartNames);
  +			else
  +				oldMimePartNames.addAll(mimePartNames);
  +		}
  +
  +		Trc.exit();
  +	}
  +
  +    public String getOperationName() {
  +    	return portTypeOperation.getName();
  +    }
  +
  +	private BindingOperation getBindingOperation(Operation operation)	throws WSIFException
{
  +		Binding binding = wsifPort.getPort().getBinding();
  +		BindingOperation bindingOp =
  +			WSIFUtils.getBindingOperation(binding, operation);
  +		if (bindingOp == null) {
  +			throw new WSIFException(
  +			   "cannot find binding operation for port operation:" +
  +			   operation.getName());
  +		}
  +		return bindingOp;
  +
  +	}
  +
   	/**
   	 * Create a new copy of this object. This is not a clone, since 
   	 * it does not copy the referenced objects as well.
  @@ -187,7 +587,7 @@
   		Trc.entry(this);
   
   		WSIFOperation_ApacheAxis op =
  -			new WSIFOperation_ApacheAxis(portInstance, operation, typeMap);
  +			new WSIFOperation_ApacheAxis(wsifPort, portTypeOperation, typeMap);
   
   		op.setSoapActionURI(getSoapActionURI());
   		op.setInputNamespace(getInputNamespace());
  @@ -210,14 +610,15 @@
   
   	public Definition getDefinition() {
   		Trc.entry(this);
  -		Trc.exit(definition);
  -		return definition;
  +		Definition d = wsifPort.getDefinition();
  +		Trc.exit(d);
  +		return d;
   	}
   
   	public WSIFPort_ApacheAxis getDynamicWSIFPort() {
   		Trc.entry(this);
  -		Trc.exit(portInstance);
  -		return portInstance;
  +		Trc.exit(wsifPort);
  +		return wsifPort;
   	}
   
   	public String getInputEncodingStyle() {
  @@ -232,17 +633,36 @@
   		return inputNamespace;
   	}
   
  +    /**
  +     * Gets the name of the portType wsdl:operation element
  +     * being used by this WSIFOperation
  +     * @return String   the operation name
  +     */
   	public String getName() {
   		Trc.entry(this);
  -		String s = operation.getName();
  +		String s = portTypeOperation.getName();
   		Trc.exit(s);
   		return s;
   	}
   
  +    /**
  +     * @deprecated use getPortTypeOperation
  +     */
   	public Operation getOperation() {
   		Trc.entry(this);
  -		Trc.exit(operation);
  -		return operation;
  +		Operation o = getPortTypeOperation();
  +		Trc.exit(o);
  +		return o;
  +	}
  +
  +    /**
  +     * Gets the portType wsdl:operation element used by this WSIFOperation
  +     * @return Operation   the WSDL4J portType Operation object
  +     */
  +	public Operation getPortTypeOperation() {
  +		Trc.entry(this);
  +		Trc.exit(portTypeOperation);
  +		return portTypeOperation;
   	}
   
   	public String getOutputEncodingStyle() {
  @@ -271,13 +691,13 @@
   
   	public String getSoapActionURI() {
   		Trc.entry(this);
  -		Trc.exit(actionUri);
  -		return actionUri;
  +		Trc.exit(soapActionURI);
  +		return soapActionURI;
   	}
   
  -	public Transport getTransport() {
  +	public Transport getTransport() throws WSIFException {
   		Trc.entry(this);
  -		Transport t = portInstance.getAxisTransport();
  +		Transport t = wsifPort.getTransport();
   		Trc.exit(t);
   		return t;
   	}
  @@ -297,7 +717,7 @@
   	 * @return String
   	 */
   	public String getStyle() {
  -		return style;
  +		return operationStyle;
   	}
   
   	/**
  @@ -396,11 +816,11 @@
   		setAsyncOperation(false);
   
   		boolean succ;
  -		if ("document".equals(style)) {
  +		if (WSIFAXISConstants.STYLE_RPC.equals(operationStyle)) {
  +			succ = invokeRequestResponseOperation(inMsg, outMsg, faultMsg);
  +		} else {
   			succ =
   				invokeRequestResponseOperationDocument(inMsg, outMsg, faultMsg);
  -		} else {
  -			succ = invokeRequestResponseOperation(inMsg, outMsg, faultMsg);
   		}
   
   		Trc.exit(succ);
  @@ -444,10 +864,12 @@
   		Trc.entry(this, input, handler);
   		close();
   
  -		if (!portInstance.supportsAsync()) {
  +		if (!wsifPort.supportsAsync()) {
   			throw new WSIFException("asynchronous operations not available");
   		}
  -		if ("document".equals(style)) {
  +		
  +		//TODO why not, no reason they shouldn't work???
  +		if (WSIFAXISConstants.STYLE_DOCUMENT.equals(operationStyle)) {
   			throw new WSIFException("docstyle asynchronous operations not implemented yet");
   		}
   
  @@ -802,7 +1224,7 @@
   		throws WSIFException {
   		Trc.entry(this, wsifmessage, wsifmessage1, wsifmessage2);
   
  -		Call call = portInstance.getCall();
  +		Call call = wsifPort.getCall();
   		Transport axistransport = getTransport();
   
   		WSIFJMSDestination dest = null;
  @@ -868,7 +1290,7 @@
   		Object response;
   		boolean respOK = true;
   		try {
  -			String name = operation.getName();
  +			String name = portTypeOperation.getName();
   			Object[] objs = objects.toArray();
   			Trc.event(
   				this,
  @@ -920,23 +1342,29 @@
   		Trc.entry(this, inMsg, outMsg, faultMsg);
   		boolean workedOK = false;
   
  -		Call call = portInstance.getCall();
  +		Call call = wsifPort.getCall();
   		call.setSOAPActionURI(getSoapActionURI());
  -		call.setTargetEndpointAddress(portInstance.getEndPoint());
  +		call.setTargetEndpointAddress(wsifPort.getEndPoint());
   		call.setEncodingStyle(null);
   		inputEncodingStyle = "";
   		outputEncodingStyle = "";
   
  -		Input inputMsg = operation.getInput();
  +        //TODO need to sort out the namespace  
  +		QName bindingQN = wsifPort.getBindingName();
  +		if (bindingQN != null) {
  +		   setInputNamespace(bindingQN.getNamespaceURI());
  +		}
  +
  +		Input inputMsg = portTypeOperation.getInput();
   		if (inputMsg != null) {
   		   List parts = inputMsg.getMessage().getOrderedParts(null);
  -		   if (WSIFUtils.isWrappedDocLiteral(parts, operation.getName())) {
  -		      style = "wrapped";
  +		   if (WSIFUtils.isWrappedDocLiteral(parts, portTypeOperation.getName())) {
  +		      operationStyle = WSIFAXISConstants.AXIS_STYLE_WRAPPED;
   		   }
   		}
   
   		if (isMessaging(inMsg)) {
  -			style = "message";
  +			operationStyle = WSIFAXISConstants.AXIS_STYLE_MESSAGE;
   		} 
   
   		if (inputPartNames == null) {
  @@ -966,7 +1394,7 @@
   		setDestinationContext(dest);
   		setCallContext(call);
   
  -		if ("message".equals(style)) {
  +		if (WSIFAXISConstants.AXIS_STYLE_MESSAGE.equals(operationStyle)) {
   			workedOK = doAXISMessaging(call, inMsg, outMsg, faultMsg);
   		} else {
   			workedOK = doAXISDocStyle(call, inMsg, outMsg, faultMsg);
  @@ -1003,10 +1431,10 @@
   		boolean respOK = false;
   
   		// setup the call object
  -		call.setOperationName(new QName(getInputNamespace(), operation.getName()));
  +		call.setOperationName(new QName(getInputNamespace(), portTypeOperation.getName()));
   		call.setScopedProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
   		call.setScopedProperty(AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
  -		call.setOperationStyle(style);
  +		call.setOperationStyle(operationStyle);
   
   		// setup the input values
   		for (int i = 0; i < inputPartNames.length; i++) {
  @@ -1077,7 +1505,7 @@
   		   }
   		}
   
  -		call.setOperationStyle("message");
  +		call.setOperationStyle(WSIFAXISConstants.AXIS_STYLE_MESSAGE);
   
   		Trc.event(this, "Invoking AXIS call", call, axisInputs);
   		Object axisResponse;
  @@ -1140,12 +1568,25 @@
   		for (Iterator iterator = typeMap.iterator(); iterator.hasNext();) {
   			wsifdynamictypemapping = (WSIFDynamicTypeMapping) iterator.next();
   			objClass = wsifdynamictypemapping.getJavaType();
  +			QName xmlType = wsifdynamictypemapping.getXmlType();
   			
  -			// don't overwrite existing mappings
  -			if (tm.getTypeQName(objClass) != null) {
  -				continue;
  +			SerializerFactory sf = null;
  +			DeserializerFactory df = null;
  +			if (tm.getSerializer(objClass, xmlType) == null) {
  +				if (objClass.isArray()) {
  +					sf = new ArraySerializerFactory();
  +				} else {
  +					sf = new BeanSerializerFactory(objClass, xmlType);
  +				}
   			}
  -			
  +			if (tm.getDeserializer(objClass, xmlType) == null) {
  +				if (objClass.isArray()) {
  +					df = new ArrayDeserializerFactory();
  +				} else {
  +					df = new BeanDeserializerFactory(objClass, xmlType);
  +				}
  +			}
  +
   			namespaceURI =
   				wsifdynamictypemapping.getXmlType().getNamespaceURI();
   
  @@ -1170,20 +1611,16 @@
                       // Attachments that are Images, Strings are unsupported at present.
                       // Attachments can only be DataHandlers.
                       Image.class.equals(objClass)
  -                        || String.class.equals(objClass)
  -                        || Source.class.equals(objClass)
  -                        || MimeMultipart.class.equals(objClass)) {
  -                    call.registerTypeMapping(
  -                        objClass,
  -                        qn,
  -                        JAFDataHandlerSerializerFactory.class,
  -                        JAFDataHandlerDeserializerFactory.class);
  -				} else {
  -					BeanSerializerFactory bsf =
  -						new BeanSerializerFactory(objClass, qn);
  -					BeanDeserializerFactory bdf =
  -						new BeanDeserializerFactory(objClass, qn);
  -					call.registerTypeMapping(objClass, qn, bsf, bdf);
  +//                  || String.class.equals(objClass)
  +                    || Source.class.equals(objClass)
  +                    || MimeMultipart.class.equals(objClass)) {
  +                        call.registerTypeMapping(
  +                           objClass,
  +                           qn,
  +                           JAFDataHandlerSerializerFactory.class,
  +                           JAFDataHandlerDeserializerFactory.class);
  +				} else if (sf != null || df != null) {
  +				   call.registerTypeMapping(objClass, qn, sf, df);
   				}
   			}
   		}
  @@ -1260,7 +1697,7 @@
   	 */
   	private List getInputParts() throws WSIFException {
   		List parts = new ArrayList();
  -		Input inputMsg = operation.getInput();
  +		Input inputMsg = portTypeOperation.getInput();
   		if (inputMsg != null) {
   			if (soapPartNames == null) {
   				parts = inputMsg.getMessage().getOrderedParts(null);
  @@ -1279,7 +1716,7 @@
   				}
   			}
   		}
  -		unWrapIfWrappedDocLit(parts, operation.getName());
  +		unWrapIfWrappedDocLit(parts, portTypeOperation.getName());
   		return parts;
   	}
   
  @@ -1289,13 +1726,13 @@
   	 */
   	private List getOutputParts() throws WSIFException {
   		List parts;
  -		Output outputMsg = operation.getOutput();
  +		Output outputMsg = portTypeOperation.getOutput();
   		if (outputMsg == null) {
   			parts = new ArrayList();
   		} else {
   			parts = outputMsg.getMessage().getOrderedParts(null);
   		}
  -		unWrapIfWrappedDocLit(parts, operation.getName() + "Response");
  +		unWrapIfWrappedDocLit(parts, portTypeOperation.getName() + "Response");
   		return parts;
   	}
   
  @@ -1304,10 +1741,10 @@
   	 */
   	private void unWrapIfWrappedDocLit(List parts, String operationName)
   		throws WSIFException {
  -		if (!"message".equals(style)) {
  +		if (!"message".equals(operationStyle)) {
   		   Part p = WSIFUtils.getWrappedDocLiteralPart(parts, operationName);
   		   if (p != null) {
  -			  List unWrappedParts = WSIFUtils.unWrapPart(p, definition);
  +			  List unWrappedParts = WSIFUtils.unWrapPart(p, getDefinition());
   			  parts.remove(p);
   			  parts.addAll(unWrappedParts);
   		   }
  @@ -1382,7 +1819,7 @@
   						+ p
   						+ " must have type name or element declared");
   			}
  -			if ("message".equals(style)) {
  +			if (WSIFAXISConstants.AXIS_STYLE_MESSAGE.equals(operationStyle)) {
   				types[i] = Element.class;
   			} else {
   				types[i] = tm.getClassForQName(partQN);
  @@ -1423,8 +1860,9 @@
   		//TODO shouldn't there be in + out mimePartNames
           if (mimePartNames != null) { 
   		   for (int i = 0; i < partNames.length; i++) {
  -			  if (partTypes[i] == null // no user explicit mapping
  -			  && mimePartNames.contains(partNames[i])) {
  +//			  if (partTypes[i] == null // no user explicit mapping
  +//			  && mimePartNames.contains(partNames[i])) {
  +			  if (mimePartNames.contains(partNames[i])) {
   				 partTypes[i] = DataHandler.class;
   				 call.registerTypeMapping(
   					DataHandler.class,
  @@ -1455,15 +1893,17 @@
   		return responseHandler;
   	}
   
  +    /**
  +     * @deprecated
  +     */
   	public void setDefinition(Definition definition1) {
   		Trc.entry(this, definition1);
  -		definition = definition1;
  -		Trc.exit();
  +		throw new RuntimeException("nolonger supported");
   	}
   
   	public void setDynamicWSIFPort(WSIFPort_ApacheAxis wsifport_apacheaxis) {
   		Trc.entry(this, wsifport_apacheaxis);
  -		portInstance = wsifport_apacheaxis;
  +		wsifPort = wsifport_apacheaxis;
   		Trc.exit();
   	}
   
  @@ -1479,9 +1919,14 @@
   		Trc.exit();
   	}
   
  +//	public void setOperation(Operation operation1) {
  +//		Trc.entry(this, operation1);
  +//		operation = operation1;
  +//		Trc.exit();
  +//	}
   	public void setOperation(Operation operation1) {
   		Trc.entry(this, operation1);
  -		operation = operation1;
  +		portTypeOperation = operation1;
   		Trc.exit();
   	}
   
  @@ -1518,7 +1963,7 @@
   
   	public void setSoapActionURI(String s) {
   		Trc.entry(this, s);
  -		actionUri = s;
  +		soapActionURI = s;
   		Trc.exit();
   	}
   
  @@ -1666,7 +2111,7 @@
   
   	private void checkForTimeoutProperties(
   		HashMap inJmsPropVals,
  -		WSIFJMSDestination dest) {
  +		WSIFJMSDestination dest) throws WSIFException {
   		for (Iterator i = inJmsPropVals.keySet().iterator(); i.hasNext();) {
   			String name = (String) i.next();
   			Object value = inJmsPropVals.get(name);
  @@ -1679,7 +2124,7 @@
   	private boolean timeoutProperty(
   		WSIFJMSDestination dest,
   		String propertyName,
  -		Object value) {
  +		Object value) throws WSIFException {
   		boolean isTimeoutProperty = false;
   		try {
   			if (WSIFConstants.WSIF_PROP_SYNC_TIMEOUT.equals(propertyName)) {
  @@ -1736,11 +2181,18 @@
   	}
   
   	/**
  -	 * Sets the style.
  -	 * @param style The style to set
  +	 * @deprecated use setOperationStyle
   	 */
   	public void setStyle(String style) {
  -		this.style = style;
  +		this.operationStyle = style;
  +	}
  +
  +	/**
  +	 * Sets the style of the operation
  +	 * @param style The style to set
  +	 */
  +	public void setOperationStyle(String style) {
  +		this.operationStyle = style;
   	}
   
   	/**
  @@ -1820,14 +2272,13 @@
   		try {
   			buff = new String(super.toString() + ":\n");
   
  -			buff += "portInstance:" + portInstance;
  -			buff += " operation:" + Trc.brief(operation);
  -			buff += " definition:" + Trc.brief(definition);
  +			buff += "portInstance:" + wsifPort;
  +			buff += " operation:" + Trc.brief(portTypeOperation);
               buff += " soapPartNames:" + soapPartNames;
               buff += " mimePartNames:" + mimePartNames;
   			buff += " inputEncodingStyle:" + inputEncodingStyle;
   			buff += " inputNamespace:" + inputNamespace;
  -			buff += " actionUri:" + actionUri;
  +			buff += " actionUri:" + soapActionURI;
   			buff += " inJmsProps:" + inJmsProps;
   			buff += " outJmsProps:" + outJmsProps;
   			buff += " inJmsPropVals:" + inJmsPropVals;
  
  
  

Mime
View raw message