You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ba...@apache.org on 2006/10/13 15:46:35 UTC

svn commit: r463680 - in /webservices/axis2/trunk/java/modules/jaxws: src/org/apache/axis2/jaxws/client/proxy/ src/org/apache/axis2/jaxws/description/ src/org/apache/axis2/jaxws/i18n/ src/org/apache/axis2/jaxws/marshaller/ src/org/apache/axis2/jaxws/ma...

Author: barrettj
Date: Fri Oct 13 06:46:31 2006
New Revision: 463680

URL: http://svn.apache.org/viewvc?view=rev&rev=463680
Log:
AXIS2-1348
Contributed by Nikhil Thaker

Modified:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescription.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/i18n/resource.properties
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/MethodParameter.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitBareMethodMarshallerImpl.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitWrappedMethodMarshallerImpl.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/MethodMarshallerImpl.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLSpineImpl.java
    webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/doclitwrap.wsdl
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AsyncCallback.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/BareTests.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/NonWrapTests.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/WrapTests.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/META-INF/services.xml
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/sei/BareDocLitService.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/DocLitWrapImpl.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/META-INF/doclitwrap.wsdl
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/sei/DocLitWrap.java

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java Fri Oct 13 06:46:31 2006
@@ -356,17 +356,13 @@
 		this.seiClazz = seiClazz;
 	}
 	private void initialize(){
-		SOAPBinding.Style styleOnSEI = endpointDesc.getEndpointInterfaceDescription().getSoapBindingStyle();
-		SOAPBinding.Style styleOnMethod = operationDesc.getSoapBindingStyle();
-		if(styleOnMethod!=null && styleOnSEI!=styleOnMethod){
-			throw ExceptionFactory.makeWebServiceException(Messages.getMessage("proxyErr2"));
-		}
+		SOAPBinding.Style style = operationDesc.getSoapBindingStyle();
 		
 		MethodMarshallerFactory cf = (MethodMarshallerFactory) FactoryRegistry.getFactory(MethodMarshallerFactory.class);
-		if(styleOnSEI == SOAPBinding.Style.DOCUMENT){
+		if(style == SOAPBinding.Style.DOCUMENT){
 			methodMarshaller = createDocLitMethodMarshaller(cf);
 		}
-		if(styleOnSEI == SOAPBinding.Style.RPC){
+		if(style == SOAPBinding.Style.RPC){
 			methodMarshaller = createRPCLitMethodMarshaller(cf);
 			
 		}

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescription.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescription.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescription.java Fri Oct 13 06:46:31 2006
@@ -549,7 +549,14 @@
     	}
     	return webParamMode;
     }
-
+    public boolean isWebParamHeader(String name){
+    	ParameterDescription paramDesc = getParameterDescription(name);
+    	if (paramDesc != null) {
+            return paramDesc.getWebParamHeader();
+        }
+        return false;    
+    }
+    
     // ===========================================
     // ANNOTATION: WebResult
     // ===========================================

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/i18n/resource.properties
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/i18n/resource.properties?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/i18n/resource.properties (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/i18n/resource.properties Fri Oct 13 06:46:31 2006
@@ -100,7 +100,7 @@
 JavaDispErr2=Unable to load service implementation class {0}.
 InvalidWebParams=Invalid webParams found, Number of webparams defined does not match the input method parameters.
 AsyncListenerErr1=AxisCallback Object cannot be null, Internal error.
-DocLitProxyHandlerErr1=As per WS-I compliance, Multi part WSDL not allowed for Doc/Lit NON Wrapped request, Method invoked has multiple input parameter.
+DocLitProxyHandlerErr1=As per WS-I compliance, Multi part WSDL with more than one body part not allowed for Doc/Lit NON Wrapped request, Method invoked has multiple input parameter.
 DocLitProxyHandlerErr2 = Method Input parameter for NON Wrapped Request cannot be null.
 DocLitProxyHandlerErr3=Method parameter type javax.xml.ws.AsyncHandler should only be used with Async Callback operations, method is Async if it returns a Future<?> and endswith letters 'Async'.
 DocLitProxyHandlerErr4=WebParam annotation's Mode cannot be IN for input parameter of type Holder.

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/MethodParameter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/MethodParameter.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/MethodParameter.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/MethodParameter.java Fri Oct 13 06:46:31 2006
@@ -32,6 +32,8 @@
 	private Class type = null;
 	private Class actualType = null; //If parameter is a GenericType, this property stores the actual Type
 	private boolean isHolder = false;
+	private String targetNamespace = null;
+	private boolean isHeader = false;
 	
 	public MethodParameter(String name, Object value, Mode mode) {
 		super();
@@ -39,11 +41,13 @@
 		this.value = value;
 		this.mode = mode;
 	}
-	public MethodParameter(String name, Object value, Mode mode, Class type, Class actualType, boolean isHolder) {
+	public MethodParameter(String name, Object value, Mode mode, Class type, Class actualType, boolean isHolder, String targetNamespace, boolean isHeader) {
 		this(name,value,mode);
 		this.type = type;
 		this.isHolder = isHolder;
 		this.actualType = actualType;
+		this.targetNamespace = targetNamespace;
+		this.isHeader = isHeader;
 	}
 	public String getName() {
 		return name;
@@ -71,5 +75,17 @@
 	}
 	public void setHolder(boolean isHolder) {
 		this.isHolder = isHolder;
+	}
+	public String getTargetNamespace() {
+		return targetNamespace;
+	}
+	public void setTargetNamespace(String targetNamespace) {
+		this.targetNamespace = targetNamespace;
+	}
+	public boolean isHeader() {
+		return isHeader;
+	}
+	public void setHeader(boolean isHeader) {
+		this.isHeader = isHeader;
 	}
 }

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitBareMethodMarshallerImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitBareMethodMarshallerImpl.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitBareMethodMarshallerImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitBareMethodMarshallerImpl.java Fri Oct 13 06:46:31 2006
@@ -60,23 +60,47 @@
 	public Object demarshalResponse(Message message, Object[] inputArgs) throws IllegalAccessException, InstantiationException, ClassNotFoundException, JAXBWrapperException, JAXBException, XMLStreamException, MessageException{
 		
 		Class returnType = getReturnType();
-		String resultName = operationDesc.getWebResultName();
-		Object bo = null;
-		if(returnType.getName().equals("void")){
-			ArrayList<MethodParameter> mps = toInputMethodParameters(inputArgs);
-			for(MethodParameter mp:mps){
-				if(mp.isHolder()){
-					returnType = mp.getActualType();
-				}
+		ArrayList<Object> holderArgs = toArrayList(inputArgs);
+		ArrayList<MethodParameter> mps = new ArrayList<MethodParameter>();
+		mps = toInputMethodParameters(inputArgs);
+		ArrayList<MethodParameter> holdermps = new ArrayList<MethodParameter>(mps);
+		int index =0;
+		//Remove everything except holders from method parameters and input arguments.
+		for(MethodParameter mp: mps){
+			if(!mp.isHolder()){
+				holdermps.remove(mp);
+				holderArgs.remove(mp.getValue());
 			}
-			
+			index++;
 		}
-		bo = createBusinessObject(returnType, message);
-		//In a bare case there should not be a situation where there is a return type and a holder.
-		createResponseHolders(bo, inputArgs, true);
-		
-		return bo;
+		mps = null;
+		if(holdermps.size() == 0 && returnType.getName().equals("void")){
+			//No holders and return type void example --> public void someMethod() I will return null for this case.
+			//doNothing as there is nothing to return.
+			
+			return null;
 		
+		}
+		else if(holdermps.size() == 0 && !returnType.getName().equals("void")){
+			//No holders but a return type example --> public ReturnType someMethod()
+			Object bo = createBusinessObject(returnType, message);
+			return bo;
+			
+		}
+		else if(holdermps.size()>0 && returnType.getName().equals("void")){
+			//Holders found and no return type example --> public void someMethod(Holder<AHolder>)	
+			createResponseHolders(holdermps, holderArgs, message);
+			
+		}
+		else{
+			//Holders found and return type example --> public ReturnType someMethod(Holder<AHolder>)
+			//Note that SEI implementation will wrap return type in a holder if method has a return type and input param as holder.
+			//WSGen and WsImport Generate Holders with return type as one of the Holder JAXBObject property, if wsdl schema forces a holder and a return type.
+			createResponseHolders(holdermps, holderArgs, message);
+			Object bo = createBusinessObject(returnType, message);
+			return bo;
+		}
+		return null;
 	}
 
 	/* (non-Javadoc)
@@ -90,31 +114,23 @@
 		if(inputParams.size() == 0){
 			return null;
 		}
-		if(inputParams.size() > SIZE){
-			if (log.isDebugEnabled()) {
-	            log.debug("As per WS-I compliance, Multi part WSDL not allowed for Doc/Lit NON Wrapped request, Method invoked has multiple input parameter");
-	        }
-			throw ExceptionFactory.makeWebServiceException(Messages.getMessage("DocLitProxyHandlerErr1"));
-		}
-		
-		Class jaxbClass = inputParams.get(0);
-		
-		Object jaxbObject = createBusinessObject(jaxbClass, message);
-        
-        if (log.isDebugEnabled()) {
+		ArrayList<Object> objectList = new ArrayList<Object>();
+		int index =0;
+		ArrayList<MethodParameter> mps = toInputMethodParameter(message);
+		if (log.isDebugEnabled()) {
             log.debug("reading input method parameters");
         }
-        Class rawType = operationDesc.getSEIMethod().getParameterTypes()[0];
-       
-        if(isHolder(rawType)){
-        	
-        	return new Object[]{createHolder(rawType, jaxbObject)};
-        }
-        else{
-        	return new Object[]{jaxbObject};
-        }
-       
-		
+		for(MethodParameter mp:mps){
+			
+			if(mp.isHolder()){
+	        	Object holderObject = mp.getValue();
+	        	objectList.add(holderObject);
+	        }
+	        else{
+	        	objectList.add(mp.getValue());
+	        }
+		}
+       return objectList.toArray();		
 	}
 
 	/* (non-Javadoc)
@@ -124,46 +140,54 @@
 	public Message marshalResponse(Object returnObject, Object[] holderObjects) throws ClassNotFoundException, JAXBException, MessageException, JAXBWrapperException, XMLStreamException, InstantiationException, IllegalAccessException{
 		// Response wrapper is basically the return type. so the return object is a jaxbObject. If there is a holder objects then that is the responsewrapper.
 		Class wrapperClazz = getReturnType();
-		String wrapperClazzName = wrapperClazz.getName();
-		String webResult = operationDesc.getWebResultName();
+		String wrapperClazzName = operationDesc.getWebResultName();
+		if(wrapperClazzName == null || wrapperClazzName.trim().length() == 0){
+			wrapperClazzName = wrapperClazz.getName();
+		}
+		String wrapperTNS = operationDesc.getWebResultTargetNamespace();
 		
-		//create all holders list
-		ArrayList<Object> objectList = new ArrayList<Object>();
-		if(holderObjects!=null){
-			objectList = toArrayList(holderObjects);
-			for(Object obj:holderObjects){
-				if(!(isHolder(obj))){
-					objectList.remove(obj);
-				}
+		ArrayList<MethodParameter> mps = new ArrayList<MethodParameter>();
+		mps = toInputMethodParameters(holderObjects);
+		ArrayList<MethodParameter> holdersNreturnObject = new ArrayList<MethodParameter>(mps);
+		
+		//Remove everything except holders
+		for(MethodParameter mp: mps){
+			if(!mp.isHolder()){
+				holdersNreturnObject.remove(mp);
 			}
 		}
-		if(objectList.size()> SIZE){
-			//More than one holder input parameter found, this is a WS-I violation.
-			if (log.isDebugEnabled()) {
-	            log.debug("As per WS-I compliance, Multi part WSDL not allowed for Doc/Lit NON Wrapped request, Method invoked has multiple input parameter");
-	        }
-			throw ExceptionFactory.makeWebServiceException(Messages.getMessage("DocLitProxyHandlerErr1"));
-		}
+		
+		mps = null;
 		Message message = null;
-		ArrayList<MethodParameter> mps = new ArrayList<MethodParameter>();
-		if(objectList.size() == 0 && wrapperClazz.getName().equals("void")){
+		
+		if(holdersNreturnObject.size() == 0 && wrapperClazz.getName().equals("void")){
 			//No holders and return type void example --> public void someMethod() I will return empty ResponseWrapper in message body for this case.
 			//doNothing as there is nothing to wrap
+			
+			message = createEmptyMessage();
 		
 		}
-		if(objectList.size() == 0 && !wrapperClazz.getName().equals("void")){
+		else if(holdersNreturnObject.size() == 0 && !wrapperClazz.getName().equals("void")){
 			//No holders but a return type example --> public ReturnType someMethod()
+			MethodParameter mp = new MethodParameter(wrapperClazzName,returnObject,null, wrapperClazz, wrapperClazz, false, wrapperTNS, false);
+			holdersNreturnObject.add(mp);
+			message = createMessage(holdersNreturnObject);
+			
+		}
+		else if(holdersNreturnObject.size()>0 && wrapperClazz.getName().equals("void")){
+			//Holders found and no return type example --> public void someMethod(Holder<AHolder>)	
+			message = createMessage(holdersNreturnObject);
 			
-			message = createMessage(returnObject, wrapperClazz, wrapperClazzName);
 		}
 		else{
-			//Holders found and return type or no return type. example --> public ReturnType someMethod(Holder<AHolder>) or public void someMethod(Holder<AHolder>)
+			//Holders found and return type example --> public ReturnType someMethod(Holder<AHolder>)
 			//Note that SEI implementation will wrap return type in a holder if method has a return type and input param as holder.
 			//WSGen and WsImport Generate Holders with return type as one of the Holder JAXBObject property, if wsdl schema forces a holder and a return type.
-			ArrayList<Class> holderType = getInputTypes();
-			Holder holder = (Holder)objectList.get(0);
-			Object value = holder.value;
-			message = createMessage(value, holderType.get(0), holderType.get(0).getName());
+			
+			MethodParameter mp = new MethodParameter(wrapperClazzName,returnObject,null, wrapperClazz, wrapperClazz, false, wrapperTNS, false);
+			holdersNreturnObject.add(mp);
+			message = createMessage(holdersNreturnObject);
+			
 		}
 		
 		return message;
@@ -176,38 +200,29 @@
 	@Override
 	public Message marshalRequest(Object[] objects) throws IllegalAccessException, InstantiationException, ClassNotFoundException, JAXBWrapperException, JAXBException, MessageException, javax.xml.stream.XMLStreamException{
 		
-		
 		ArrayList<MethodParameter> mps = toInputMethodParameters(objects);
-		
 		//WSDL wrapped and running wsImport with non-wrap binding or wsdl un-Wrapped and running wsImport with no binding, EITHER WAYS 
 		//there can be only 0 or 1 Body parts as per WS-I. 
 		if(mps.size()> SIZE){
-			if (log.isDebugEnabled()) {
-	            log.debug("As per WS-I compliance, Multi part WSDL not allowed for Doc/Lit NON Wrapped request, Method invoked has multiple input parameter");
-	        }
-			throw ExceptionFactory.makeWebServiceException(Messages.getMessage("DocLitProxyHandlerErr1"));
+			int numberOfBodyPart =0;
+			for(MethodParameter mp:mps){
+				if(!mp.isHeader()){
+					numberOfBodyPart++;
+				}
+			}
+			if(numberOfBodyPart > SIZE){
+				if (log.isDebugEnabled()) {
+		            log.debug("As per WS-I compliance, Multi part WSDL with more than one body part not allowed for Doc/Lit NON Wrapped request, Method invoked has multiple input parameter");
+		        }
+				throw ExceptionFactory.makeWebServiceException(Messages.getMessage("DocLitProxyHandlerErr1"));
+			}
 		}
 		
 		//Lets handle case where there is one message part or one input parameter
 		Message message = null;
+		
 		if(mps.size() !=0){
-			Object requestObject = null;
-			String requestObjectName = null;
-			Class requestObjectType = null;
-			JAXBContext ctx = null;
-			for(MethodParameter mp : mps){
-				requestObject = mp.getValue();
-				requestObjectName = mp.getName();
-				requestObjectType = mp.getActualType();
-				if(requestObject == null){
-					if (log.isDebugEnabled()) {
-			            log.debug("Method Input parameter for NON Wrapped Request cannot be null");
-			        }
-					throw ExceptionFactory.makeWebServiceException(Messages.getMessage("DocLitProxyHandlerErr2"));
-				}
-			}
-				
-			message = createMessage(requestObject, requestObjectType, requestObjectName);
+			message = createMessage(mps);
 		}
 		//no message part case or no input parameter
 		if(mps.size() == 0){

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitWrappedMethodMarshallerImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitWrappedMethodMarshallerImpl.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitWrappedMethodMarshallerImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/DocLitWrappedMethodMarshallerImpl.java Fri Oct 13 06:46:31 2006
@@ -117,6 +117,7 @@
 	public Message marshalResponse(Object returnObject, Object[] holderObjects)throws ClassNotFoundException, JAXBException, MessageException, JAXBWrapperException, XMLStreamException, InstantiationException, IllegalAccessException {
 		Class wrapperClazz = null;
 		String wrapperClazzName = operationDesc.getResponseWrapperClassName();
+		String wrapperTNS = operationDesc.getResponseWrapperTargetNamespace();
 		String webResult = operationDesc.getWebResultName();
 		//TODO Move this to Operation Description.
 		if(wrapperClazzName == null || (wrapperClazzName!=null && wrapperClazzName.length()==0)){
@@ -158,7 +159,7 @@
         Object wrapper = wrapperTool.wrap(wrapperClazz, 
         		wrapperClazzName, mps);
         
-		Message message = createMessage(wrapper, wrapperClazz, wrapperClazzName);
+		Message message = createMessage(wrapper, wrapperClazz, wrapperClazzName, wrapperTNS);
 		return message;
 		
 	}
@@ -172,6 +173,7 @@
 		String className = operationDesc.getRequestWrapperClassName();
 		Class wrapperClazz = loadClass(className);
 		String localName = operationDesc.getRequestWrapperLocalName();
+		String wrapperTNS = operationDesc.getRequestWrapperTargetNamespace();
 		
 		//Get Name Value pair for input parameter Objects, skip AsyncHandler and identify Holders.
 		ArrayList<MethodParameter> methodParameters = toInputMethodParameters(objects);
@@ -185,7 +187,7 @@
             log.debug("JAXBWrapperTool wrapped following propertes :");
         }
 		
-		Message message = createMessage(jaxbObject, wrapperClazz, localName);
+		Message message = createMessage(jaxbObject, wrapperClazz, localName, wrapperTNS);
 		return message;
 	}
 

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/MethodMarshallerImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/MethodMarshallerImpl.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/MethodMarshallerImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/MethodMarshallerImpl.java Fri Oct 13 06:46:31 2006
@@ -153,14 +153,14 @@
 		}
 		
 		ArrayList<Object> paramValues = toArrayList(holderObjects);
+		ArrayList<MethodParameter> mps = createMethodParameters(paramNames, paramValues, paramMode, paramTypes, actualTypes);
 		if(webResultObject!=null){
-			paramValues.add(webResultObject);
-			paramNames.add(operationDesc.getWebResultName());
-			//dummy mode for return object
-			paramMode.add(Mode.IN);
+			MethodParameter outputResult = new MethodParameter(operationDesc.getWebResultName(), webResultObject, null);
+			mps.add(outputResult);
 		}
+		
 		//lets create name value pair.
-		return createMethodParameters(paramNames, paramValues, paramMode, paramTypes, actualTypes);
+		return mps;
 		
 	}
 	
@@ -214,6 +214,12 @@
 		ArrayList<Class> actualTypes = getInputTypes();
 		int i =0;
 		
+		//if no webParam defined then lets get default names.
+		if(paramNames.size() == 0 && paramTypes.size()>0){
+			while(i< paramTypes.size()){
+				paramNames.add(DEFAULT_ARG + i++);
+			}
+		}
 		if(paramNames.size() != paramValues.size()){
 			throw ExceptionFactory.makeWebServiceException(Messages.getMessage("InvalidWebParams"));
 		}
@@ -223,6 +229,53 @@
 		return mps;
 	}
 	
+	protected ArrayList<MethodParameter> toInputMethodParameter(Message message)throws IllegalAccessException, InstantiationException, ClassNotFoundException, MessageException, XMLStreamException, JAXBException{
+		ArrayList<MethodParameter> mps = new ArrayList<MethodParameter>();
+		if(message == null){
+			return null;
+		}
+		ArrayList<String> paramNames = new ArrayList<String>();
+		paramNames =toArrayList(operationDesc.getWebParamNames());
+		
+		//Get all modes for params
+		ArrayList<Mode> paramMode = new ArrayList<Mode>();
+		paramMode = toArrayList(operationDesc.getWebParamModes());
+		
+		Method seiMethod = operationDesc.getSEIMethod();
+		
+		Class[] clazz = seiMethod.getParameterTypes();
+		ArrayList<Class> paramTypes = toArrayList(clazz);
+     
+		ArrayList<Class> actualTypes = getInputTypes();
+		
+		int i =0;
+		//if no webParam defined then lets get default names.
+		if(paramNames.size() == 0 && paramTypes.size()>0){
+			while(i< paramTypes.size()){
+				paramNames.add(DEFAULT_ARG + i++);
+			}
+		}
+		i =0;
+		ArrayList<Object> paramValues = new ArrayList<Object>(); 
+		for(String paramName:paramNames){
+			String paramTNS = operationDesc.getWebParamTargetNamespace(paramName);
+			boolean isHeader = operationDesc.isWebParamHeader(paramName);
+			Object bo = null;
+			if(isHeader){
+				bo = createBOFromHeaderBlock(actualTypes.get(i), message, paramTNS, paramName);
+			}
+			else{
+				bo = createBOFromBodyBlock(actualTypes.get(i),message);
+			}
+			paramValues.add(bo);
+			i++;
+		}
+		//lets create name value pair.
+		mps = createMethodParameters(paramNames, paramValues, paramMode, paramTypes, actualTypes);
+		
+		return mps;
+	}
+	
 	protected ArrayList<Class> getInputTypes(){
 		Method seiMethod = operationDesc.getSEIMethod();
 		ArrayList<Class> paramTypes = new ArrayList<Class>();
@@ -233,12 +286,6 @@
 				Class rawClazz = (Class)pType.getRawType();
 				Class actualClazz = (Class)pType.getActualTypeArguments()[0];
 				paramTypes.add(actualClazz);
-				/*
-				if(rawClazz.isAssignableFrom(Holder.class)){
-					Class actualClazz = (Class)pType.getActualTypeArguments()[0];
-					paramTypes.add(actualClazz);
-				}
-				*/
 			}
 			else{
 				Class formalClazz= (Class)type;
@@ -273,7 +320,7 @@
 		
 	}
 	
-	protected Block createJAXBBlock(String name, Object jaxbObject, JAXBContext context) throws MessageException{
+	protected Block createJAXBBlock(String name, Object jaxbObject, JAXBContext context, String targetNamespace) throws MessageException{
 		
 		JAXBIntrospector introspector = context.createJAXBIntrospector();
 		if(introspector.isElement(jaxbObject)){
@@ -282,7 +329,7 @@
 		else{
 			//Create JAXBElement then use that to create JAXBBlock.
 			Class clazz = jaxbObject.getClass();
-			JAXBElement<Object> element = new JAXBElement<Object>(new QName(name), clazz, jaxbObject);
+			JAXBElement<Object> element = new JAXBElement<Object>(new QName(targetNamespace, name), clazz, jaxbObject);
 			JAXBBlockFactory factory = (JAXBBlockFactory)FactoryRegistry.getFactory(JAXBBlockFactory.class);
 			return factory.createFrom(element,context ,null);
 		}
@@ -355,7 +402,8 @@
 		int i=0;
 		for(String paramName:paramNames){
 			Object paramValue = paramValues.get(i);
-			
+			String paramTNS = operationDesc.getWebParamTargetNamespace(paramName);
+			boolean isHeader = operationDesc.isWebParamHeader(paramName);
 			//initialize to default value.
 			Mode paramMode = Mode.IN;
 			if(paramModes !=null && paramModes.size() >0){
@@ -377,25 +425,31 @@
 					//Identify Holders and get Holder Values, this if condition will mostly execute during client side call
 					if(isHolder(paramValue) && isHolder(paramType)){
 						Object holderValue = getHolderValue(paramMode, paramValue);
-						mp = new MethodParameter(paramName, holderValue, paramMode, paramType, actualType, true);
+						mp = new MethodParameter(paramName, holderValue, paramMode, paramType, actualType, true, paramTNS, isHeader);
 						
 					}
 					//Identify that param value is not Holders however if the method parameter is holder type and create Holder, this will mostly be called during server side call 
 					else if(!isHolder(paramValue) && isHolder(paramType)){
 						Holder<Object> holder = createHolder(paramType, paramValue);
-						mp=new MethodParameter(paramName, holder, paramMode, paramType, actualType, true);
+						mp=new MethodParameter(paramName, holder, paramMode, paramType, actualType, true, paramTNS, isHeader);
 					}
 					else{
-						mp = new MethodParameter(paramName, paramValue, paramMode, paramType, actualType, false);
+						mp = new MethodParameter(paramName, paramValue, paramMode, paramType, actualType, false, paramTNS, isHeader);
 					}
 				}
 				if(paramType == null){
 					if(isHolder(paramValue)){
 						Object holderValue = getHolderValue(paramMode, paramValue);
-						mp = new MethodParameter(paramName, holderValue, paramMode);	
+						mp = new MethodParameter(paramName, holderValue, paramMode);
+						mp.setHolder(true);
+						mp.setTargetNamespace(paramTNS);
+						mp.setHeader(isHeader);
 					}
 					else{
 						mp = new MethodParameter(paramName, paramValues, paramMode);
+						mp.setHolder(false);
+						mp.setTargetNamespace(paramTNS);
+						mp.setHeader(isHeader);
 					}
 				}
 				mps.add(mp);
@@ -461,7 +515,60 @@
 		return null;
 	}
 	
-	protected Message createMessage(Object jaxbObject, Class jaxbClazz, String jaxbClassName)throws JAXBException, MessageException, XMLStreamException{
+	protected Message createMessage(ArrayList<MethodParameter> mps) throws JAXBException, MessageException, XMLStreamException{
+		Block block = null;
+		Object requestObject = null;
+		String requestObjectName = null;
+		String requestTNS = null;
+		Class requestObjectType = null;
+		boolean isHeader =false;
+		
+		MessageFactory mf = (MessageFactory)FactoryRegistry.getFactory(MessageFactory.class);
+		Message m = mf.create(protocol);
+		
+		for(MethodParameter mp : mps){
+			requestObject = mp.getValue();
+			requestObjectName = mp.getName();
+			requestObjectType = mp.getActualType();
+			requestTNS = mp.getTargetNamespace();
+			isHeader = mp.isHeader();
+			if(!isHeader && requestObject == null){
+				if (log.isDebugEnabled()) {
+		            log.debug("Method Input parameter for NON Wrapped Request cannot be null");
+		        }
+				throw ExceptionFactory.makeWebServiceException(Messages.getMessage("DocLitProxyHandlerErr2"));
+			}
+			JAXBContext ctx = createJAXBContext(requestObjectType);
+			if (log.isDebugEnabled()) {
+	            log.debug("Attempting to create Block");
+	        }
+			if(isXmlRootElementDefined(requestObjectType)){
+				block = createJAXBBlock(requestObject, ctx);
+			}
+			else{
+				
+				block =  createJAXBBlock(requestObjectName, requestObject, ctx, requestTNS);
+			}
+			if (log.isDebugEnabled()) {
+	            log.debug("JAXBBlock Created");
+	        }	
+			if(isHeader){
+				m.setHeaderBlock(requestTNS, requestObjectName, block);
+				if (log.isDebugEnabled()) {
+		            log.debug("Header Block Created");
+		        }
+			}
+			else{
+				m.setBodyBlock(0,block);
+				if (log.isDebugEnabled()) {
+		            log.debug("Body Block Created");
+		        }
+			}
+		}
+		return m;
+	}
+	
+	protected Message createMessage(Object jaxbObject, Class jaxbClazz, String jaxbClassName, String targetNamespace)throws JAXBException, MessageException, XMLStreamException{
 		Block bodyBlock = null;
 		JAXBContext ctx = createJAXBContext(jaxbClazz);
 		if (log.isDebugEnabled()) {
@@ -471,7 +578,7 @@
 			bodyBlock = createJAXBBlock(jaxbObject, ctx);
 		}
 		else{
-			bodyBlock =  createJAXBBlock(jaxbClassName, jaxbObject, ctx);
+			bodyBlock =  createJAXBBlock(jaxbClassName, jaxbObject, ctx, targetNamespace);
 		}
 		if (log.isDebugEnabled()) {
             log.debug("JAXBBlock Created");
@@ -483,6 +590,7 @@
 		m.setBodyBlock(0,bodyBlock);
 		return m;
 	}
+	
 	protected Message createEmptyMessage()throws JAXBException, MessageException, XMLStreamException{
 		Block emptyBodyBlock = createEmptyBodyBlock();
 		MessageFactory mf = (MessageFactory)FactoryRegistry.getFactory(MessageFactory.class);
@@ -491,6 +599,20 @@
 		return m;
 	}
 	
+	protected Object createBOFromHeaderBlock(Class jaxbClazz, Message message, String targetNamespace, String localPart) throws JAXBException, MessageException, XMLStreamException{
+		JAXBContext ctx = createJAXBContext(jaxbClazz);
+		
+		// Get a JAXBBlockFactory instance.  We'll need this to get the JAXBBlock
+        // out of the Message
+        JAXBBlockFactory factory = (JAXBBlockFactory)FactoryRegistry.getFactory(JAXBBlockFactory.class); 
+        Block block = message.getHeaderBlock(targetNamespace, localPart, ctx, factory);
+        return block.getBusinessObject(false);
+	}
+	
+	protected Object createBOFromBodyBlock(Class jaxbClazz, Message message) throws JAXBException, MessageException, XMLStreamException{
+		return createBusinessObject(jaxbClazz, message);
+	}
+	
 	protected Object createBusinessObject(Class jaxbClazz, Message message) throws JAXBException, MessageException, XMLStreamException{
 		JAXBContext ctx = createJAXBContext(jaxbClazz);
 		
@@ -500,7 +622,7 @@
         
         Block block = message.getBodyBlock(0, ctx, factory);
         try{
-        	return block.getBusinessObject(true);
+        	return block.getBusinessObject(false);
         }catch(Exception e){
         //FIXME: this is the bare case where child of body is not a method but a primitive data type. Reader from Block is throwing exception.
         	block = message.getBodyBlock(0, ctx,factory);
@@ -515,6 +637,28 @@
         	return o.getValue();
         
         }       
+	}
+	protected void createResponseHolders(ArrayList<MethodParameter> mps, ArrayList<Object> inputArgHolders, Message message)throws JAXBException, MessageException, XMLStreamException{
+		Object bo = null;
+		int index = 0;
+		for(MethodParameter mp:mps){
+			if(mp.isHeader() && mp.isHolder()){
+				bo = createBOFromHeaderBlock(mp.getActualType(),message, mp.getTargetNamespace(), mp.getName());
+				
+			}
+			else if(!mp.isHeader() && mp.isHolder()){
+				bo = createBOFromBodyBlock(mp.getActualType(), message);
+			}
+			try{
+				Holder inputArgHolder = (Holder)inputArgHolders.get(index);
+				inputArgHolder.value = bo;
+				index++;
+			}catch(Exception e){
+				ExceptionFactory.makeWebServiceException(e);
+			}
+		}
+		
+	
 	}
 	
 	protected void createResponseHolders(Object bo, Object[] inputArgs, boolean isBare)throws JAXBWrapperException, InstantiationException, ClassNotFoundException, IllegalAccessException{

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLSpineImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLSpineImpl.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLSpineImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLSpineImpl.java Fri Oct 13 06:46:31 2006
@@ -115,7 +115,8 @@
 		SOAPHeader header = root.getHeader();
 		if (header != null) {
             Iterator it = header.getChildren();
-            advanceIterator(it, headerBlocks, true);            
+            advanceIterator(it, headerBlocks, false); 
+            //advanceIterator(it, headerBlocks, true);            
         }
 
 		
@@ -296,8 +297,8 @@
 	public Block getHeaderBlock(String namespace, String localPart, Object context, BlockFactory blockFactory) throws MessageException {
 		int index = getHeaderBlockIndex(namespace, localPart);
 		try {
-			Block oldBlock = bodyBlocks.get(index);
-		
+			//Block oldBlock = bodyBlocks.get(index);
+			Block oldBlock = headerBlocks.get(index);
 			// Convert to new Block
 			Block newBlock = blockFactory.createFrom(oldBlock, context);
 			if (newBlock != oldBlock) {
@@ -311,7 +312,8 @@
 
 	public void setHeaderBlock(String namespace, String localPart, Block block) throws MessageException {
 		int index = getHeaderBlockIndex(namespace, localPart);
-		headerBlocks.set(index, block);
+		headerBlocks.add(block);
+		//headerBlocks.set(index, block);
         block.setParent(this);
 	}
 

Modified: webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/doclitwrap.wsdl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/doclitwrap.wsdl?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/doclitwrap.wsdl (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/doclitwrap.wsdl Fri Oct 13 06:46:31 2006
@@ -125,6 +125,40 @@
 				</xsd:complexContent>
 			</xsd:complexType>
 
+			<xsd:element name="headerPart0">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="headerType" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="headerPart1">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="headerType" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="header">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="in" type="xsd:string" />
+						<xsd:element name="out" type="xsd:long" />
+						<xsd:element name="inout" type="xsd:integer" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="headerResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="out" type="xsd:long" />
+						<xsd:element name="inout" type="xsd:integer" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
 		</xsd:schema>
 	</wsdl:types>
 
@@ -168,6 +202,16 @@
 		<wsdl:part name="op" element="tns:finOpResponse" />
 	</wsdl:message>
 
+	<wsdl:message name="headerRequest">
+		<wsdl:part name="payload" element="tns:header" />
+		<wsdl:part name="header0" element="tns:headerPart0" />
+		<wsdl:part name="header1" element="tns:headerPart1" />
+	</wsdl:message>
+
+	<wsdl:message name="headerResponse">
+		<wsdl:part name="payload" element="tns:headerResponse" />
+		<wsdl:part name="header0" element="tns:headerPart0" />
+	</wsdl:message>
 	<wsdl:portType name="DocLitWrap">
 
 		<wsdl:operation name="oneWayVoid">
@@ -188,6 +232,10 @@
 			<wsdl:output message="tns:twoWayResponse" />
 		</wsdl:operation>
 		
+		<wsdl:operation name="header">
+			<wsdl:input message="tns:headerRequest" />
+			<wsdl:output message="tns:headerResponse" />
+		</wsdl:operation>		
 		<wsdl:operation name="invoke">
 			<wsdl:input message="tns:invokeRequest" />
 			<wsdl:output message="tns:invokeResponse" />
@@ -230,7 +278,21 @@
 			<wsdl:output>
 				<soap:body use="literal" />
 			</wsdl:output>
+		</wsdl:operation>
 
+		<wsdl:operation name="header">
+			<soap:operation
+				soapAction="http://addheaders.sample.test.org/header" />
+        
+			<wsdl:input>
+				<soap:header use="literal" message="tns:headerRequest" part="header0"/>			
+				<soap:header use="literal" message="tns:headerRequest" part="header1"/>			
+				<soap:body use="literal" parts="payload"/>
+			</wsdl:input>
+			<wsdl:output>
+				<soap:header use="literal" message="tns:headerResponse" part="header0"/>			
+				<soap:body use="literal" parts="payload"/>			
+			</wsdl:output>
 		</wsdl:operation>
 
 		<wsdl:operation name="twoWay">

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AsyncCallback.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AsyncCallback.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AsyncCallback.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AsyncCallback.java Fri Oct 13 06:46:31 2006
@@ -9,6 +9,7 @@
 import javax.xml.ws.Response;
 
 import org.test.sample.nonwrap.ReturnType;
+import org.test.sample.nonwrap.TwoWayHolder;
 
 
 
@@ -36,6 +37,11 @@
 				ReturnType type = (ReturnType)obj;
 				System.out.println(">>Return String = "+type.getReturnStr());
 				return;
+			}
+			if(obj instanceof TwoWayHolder){
+				TwoWayHolder twh = (TwoWayHolder)obj;
+				System.out.println("AsyncCallback Holder string ="+twh.getTwoWayHolderStr());
+				System.out.println("AsyncCallback Holder int ="+twh.getTwoWayHolderInt());
 			}
 			
 		}catch(ExecutionException e){

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/BareTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/BareTests.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/BareTests.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/BareTests.java Fri Oct 13 06:46:31 2006
@@ -16,15 +16,17 @@
 	public void testTwoWaySync(){
 		System.out.println("------------------------------");
 		System.out.println("Test : "+getName());
+		
 		try{
 			
 			BareDocLitService service = new BareDocLitService();
 			DocLitBarePortType proxy = service.getBareDocLitPort();
 			 BindingProvider p = (BindingProvider) proxy;
-	            p.getRequestContext().put(
+			 p.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:7777/axis2/services/BareDocLitService");
+	            /*p.getRequestContext().put(
 	                    BindingProvider.SOAPACTION_URI_PROPERTY, new Boolean(true));
 	            p.getRequestContext().put(
-	                    BindingProvider.SOAPACTION_URI_PROPERTY, "twoWaySimple");
+	                    BindingProvider.SOAPACTION_URI_PROPERTY, "twoWaySimple");*/
 			String response = proxy.twoWaySimple(10);
 			System.out.println("Sync Response =" + response);
 			System.out.println("------------------------------");

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/NonWrapTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/NonWrapTests.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/NonWrapTests.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/NonWrapTests.java Fri Oct 13 06:46:31 2006
@@ -87,4 +87,29 @@
 			fail();
 		}
 	}
+	
+	public void testTwoWayHolderAsync(){
+		System.out.println("------------------------------");
+		System.out.println("Test : "+getName());
+		try{
+			TwoWayHolder twh = new TwoWayHolder();
+			twh.setTwoWayHolderInt(new Integer(0));
+			twh.setTwoWayHolderStr(new String("Request Holder String"));
+			Holder<TwoWayHolder> holder = new Holder<TwoWayHolder>(twh);
+			TwoWay twoWay = new ObjectFactory().createTwoWay();
+			twoWay.setTwowayStr("testing sync call for java bean non wrap endpoint");
+			DocLitNonWrapService service = new DocLitNonWrapService();
+			DocLitNonWrapPortType proxy = service.getDocLitNonWrapPort();
+			AsyncCallback callback = new AsyncCallback();
+			Future<?> monitor =proxy.twoWayHolderAsync(twh, callback);
+			while(!monitor.isDone()){
+				Thread.sleep(1000);
+			}
+			
+			System.out.println("------------------------------");
+		}catch(Exception e){
+			e.printStackTrace();
+			fail();
+		}
+	}
 }

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/WrapTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/WrapTests.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/WrapTests.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/WrapTests.java Fri Oct 13 06:46:31 2006
@@ -6,6 +6,12 @@
 import javax.xml.ws.Holder;
 import org.apache.axis2.jaxws.sample.wrap.sei.DocLitWrap;
 import org.apache.axis2.jaxws.sample.wrap.sei.DocLitWrapService;
+import org.test.sample.wrap.Header;
+import org.test.sample.wrap.HeaderPart0;
+import org.test.sample.wrap.HeaderPart1;
+import org.test.sample.wrap.HeaderResponse;
+
+import com.ibm.CORBA.iiop.Response;
 
 import junit.framework.TestCase;
 
@@ -82,5 +88,48 @@
 			fail();
 		}
 	}
+	
+	public void testTwoWayWithHeadersAndHolders(){
+		System.out.println("------------------------------");
+		System.out.println("Test : "+getName());
+		try{
+			Header header = new Header();
+			header.setOut(0);
+			HeaderPart0 hp0= new HeaderPart0();
+			hp0.setHeaderType("Client setup Header Type for HeaderPart0");
+			HeaderPart1 hp1 = new HeaderPart1();
+			hp1.setHeaderType("Client setup Header Type for HeaderPart0");
+			Holder<HeaderPart0> holder = new Holder<HeaderPart0>(hp0);
+			DocLitWrapService service = new DocLitWrapService();
+			DocLitWrap proxy = service.getDocLitWrapPort();
+			HeaderResponse hr = proxy.header(header, holder, hp1);
+			hp0=holder.value;
+			System.out.println("Holder Response String =" + hp0.getHeaderType());
+			System.out.println("Header Response Long =" + hr.getOut());
+			System.out.println("------------------------------");
+		}catch(Exception e){
+			e.printStackTrace();
+			fail();
+		}
+	}
 
+	public void testTwoWayHolderAsync(){
+		System.out.println("------------------------------");
+		System.out.println("Test : "+getName());
+		try{
+			String holderString = new String("Test twoWay Sync");
+			Integer holderInteger = new Integer(0);
+			Holder<String> strHolder = new Holder<String>(holderString);
+			Holder<Integer> intHolder = new Holder<Integer>(holderInteger);
+			DocLitWrapService service = new DocLitWrapService();
+			DocLitWrap proxy = service.getDocLitWrapPort();
+			proxy.twoWayHolder(strHolder, intHolder);
+			System.out.println("Holder Response String =" + strHolder.value);;
+			System.out.println("Holder Response Integer ="+ intHolder.value);
+			System.out.println("------------------------------");
+		}catch(Exception e){
+			e.printStackTrace();
+			fail();
+		}
+	}
 }

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/META-INF/services.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/META-INF/services.xml?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/META-INF/services.xml (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/META-INF/services.xml Fri Oct 13 06:46:31 2006
@@ -4,7 +4,11 @@
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.jaxws.server.JAXWSMessageReceiver"/>
   </messageReceivers>
   <parameter locked="false" name="ServiceClass">org.apache.axis2.jaxws.sample.doclitbare.DocLitBarePortTypeImpl</parameter>
-    <actionMapping/>
+  <operation name="twoWaySimple" mep="http://www.w3.org/2004/08/wsdl/in-out">
+	<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.jaxws.server.JAXWSMessageReceiver"/>
+	</messageReceivers>
+    <actionMapping>twoWaySimple<actionMapping/>
+  <operation/>
  </service>
 </serviceGroup>
 

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/sei/BareDocLitService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/sei/BareDocLitService.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/sei/BareDocLitService.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/sei/BareDocLitService.java Fri Oct 13 06:46:31 2006
@@ -23,7 +23,7 @@
 
     private final static URL BAREDOCLITSERVICE_WSDL_LOCATION;
 
-    private static String wsdlLocation="/test/org/apache/axis2/jaxws/sample/doclitbare/META-INF/doclitbare.wsdl";
+    private static String wsdlLocation="/modules/jaxws/test/org/apache/axis2/jaxws/sample/doclitbare/META-INF/doclitbare.wsdl";
     static {
         URL url = null;
         try {

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/DocLitWrapImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/DocLitWrapImpl.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/DocLitWrapImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/DocLitWrapImpl.java Fri Oct 13 06:46:31 2006
@@ -10,6 +10,10 @@
 import org.test.sample.nonwrap.ObjectFactory;
 import org.test.sample.nonwrap.ReturnType;
 import org.test.sample.wrap.FinancialOperation;
+import org.test.sample.wrap.Header;
+import org.test.sample.wrap.HeaderPart0;
+import org.test.sample.wrap.HeaderPart1;
+import org.test.sample.wrap.HeaderResponse;
 
 @WebService(endpointInterface="org.apache.axis2.jaxws.sample.wrap.sei.DocLitWrap")
 public class DocLitWrapImpl implements DocLitWrap {
@@ -69,5 +73,17 @@
 		// TODO Auto-generated method stub
 		return null;
 	}
+	
+    public HeaderResponse header(Header payload, Holder<HeaderPart0> header0, HeaderPart1 header1){
+    	
+    	HeaderPart0 hpo= (HeaderPart0)header0.value;
+    	hpo = new HeaderPart0();
+    	hpo.setHeaderType("Header Type from Endpoint implementation");
+    	header0.value = hpo;
+    	//hpo.setHeaderType("");
+    	HeaderResponse response = new HeaderResponse();
+    	response.setOut(1000);
+    	return response;
+    }
 
 }

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/META-INF/doclitwrap.wsdl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/META-INF/doclitwrap.wsdl?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/META-INF/doclitwrap.wsdl (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/META-INF/doclitwrap.wsdl Fri Oct 13 06:46:31 2006
@@ -125,6 +125,40 @@
 				</xsd:complexContent>
 			</xsd:complexType>
 
+			<xsd:element name="headerPart0">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="headerType" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="headerPart1">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="headerType" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="header">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="in" type="xsd:string" />
+						<xsd:element name="out" type="xsd:long" />
+						<xsd:element name="inout" type="xsd:integer" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="headerResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="out" type="xsd:long" />
+						<xsd:element name="inout" type="xsd:integer" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
 		</xsd:schema>
 	</wsdl:types>
 
@@ -168,6 +202,16 @@
 		<wsdl:part name="op" element="tns:finOpResponse" />
 	</wsdl:message>
 
+	<wsdl:message name="headerRequest">
+		<wsdl:part name="payload" element="tns:header" />
+		<wsdl:part name="header0" element="tns:headerPart0" />
+		<wsdl:part name="header1" element="tns:headerPart1" />
+	</wsdl:message>
+
+	<wsdl:message name="headerResponse">
+		<wsdl:part name="payload" element="tns:headerResponse" />
+		<wsdl:part name="header0" element="tns:headerPart0" />
+	</wsdl:message>
 	<wsdl:portType name="DocLitWrap">
 
 		<wsdl:operation name="oneWayVoid">
@@ -188,6 +232,10 @@
 			<wsdl:output message="tns:twoWayResponse" />
 		</wsdl:operation>
 		
+		<wsdl:operation name="header">
+			<wsdl:input message="tns:headerRequest" />
+			<wsdl:output message="tns:headerResponse" />
+		</wsdl:operation>		
 		<wsdl:operation name="invoke">
 			<wsdl:input message="tns:invokeRequest" />
 			<wsdl:output message="tns:invokeResponse" />
@@ -230,7 +278,21 @@
 			<wsdl:output>
 				<soap:body use="literal" />
 			</wsdl:output>
+		</wsdl:operation>
 
+		<wsdl:operation name="header">
+			<soap:operation
+				soapAction="http://addheaders.sample.test.org/header" />
+        
+			<wsdl:input>
+				<soap:header use="literal" message="tns:headerRequest" part="header0"/>			
+				<soap:header use="literal" message="tns:headerRequest" part="header1"/>			
+				<soap:body use="literal" parts="payload"/>
+			</wsdl:input>
+			<wsdl:output>
+				<soap:header use="literal" message="tns:headerResponse" part="header0"/>			
+				<soap:body use="literal" parts="payload"/>			
+			</wsdl:output>
 		</wsdl:operation>
 
 		<wsdl:operation name="twoWay">

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/sei/DocLitWrap.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/sei/DocLitWrap.java?view=diff&rev=463680&r1=463679&r2=463680
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/sei/DocLitWrap.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/wrap/sei/DocLitWrap.java Fri Oct 13 06:46:31 2006
@@ -5,6 +5,8 @@
 import javax.jws.WebMethod;
 import javax.jws.WebParam;
 import javax.jws.WebParam.Mode;
+import javax.jws.soap.SOAPBinding;
+import javax.jws.soap.SOAPBinding.ParameterStyle;
 import javax.jws.WebResult;
 import javax.jws.WebService;
 import javax.xml.ws.Holder;
@@ -12,6 +14,10 @@
 import javax.xml.ws.ResponseWrapper;
 
 import org.test.sample.wrap.FinancialOperation;
+import org.test.sample.wrap.Header;
+import org.test.sample.wrap.HeaderPart0;
+import org.test.sample.wrap.HeaderPart1;
+import org.test.sample.wrap.HeaderResponse;
 
 
 /**
@@ -98,5 +104,25 @@
     public FinancialOperation finOp(
         @WebParam(name = "op", targetNamespace = "")
         FinancialOperation op);
+    
+    /**
+     * 
+     * @param header1
+     * @param header0
+     * @param payload
+     * @return
+     *     returns org.test.sample.wrap.HeaderResponse
+     */
+    @WebMethod(action = "http://addheaders.sample.test.org/header")
+    @WebResult(name = "headerResponse", targetNamespace = "http://wrap.sample.test.org", partName = "payload")
+    @SOAPBinding(parameterStyle = ParameterStyle.BARE)
+    public HeaderResponse header(
+        @WebParam(name = "header", targetNamespace = "http://wrap.sample.test.org", partName = "payload")
+        Header payload,
+        @WebParam(name = "headerPart0", targetNamespace = "http://wrap.sample.test.org", header = true, mode = Mode.INOUT, partName = "header0")
+        Holder<HeaderPart0> header0,
+        @WebParam(name = "headerPart1", targetNamespace = "http://wrap.sample.test.org", header = true, partName = "header1")
+        HeaderPart1 header1);
+
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org