axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sharath reddy <sharathre...@yahoo.com>
Subject Issue with Provider-based Jax-ws service and Wsdl
Date Thu, 26 Feb 2009 10:24:37 GMT
Hi, 

I'm having trouble trying to deploy a Provider-based web service: 

@WebServiceProvider(
		portName="SamplePort",
		serviceName="SampleProvider",
	        targetNamespace="http://sample.org",
	        wsdlLocation="META-INF/provider.wsdl"
)
@BindingType(value=SOAPBinding.SOAP11HTTP_BINDING)
@ServiceMode(value=javax.xml.ws.Service.Mode.PAYLOAD)

public class SampleProvider implements Provider<Source>{ ... 

I have provided a WSDL file at the location indicated above (WsdlLocation).

When I query the service with the '?wsdl' parameter, I want to see the WSDL above, and NOT
generate the WSDL from the annotated class. In any case, we can't generate a WSDL from a Provider
class since the class does not contain port type and operation information. 

In order to do so, I had to make the following 2 changes:
1. In order to display the user-provided WSLD, I had to hack this method in AxisService to
always return TRUE, since I am not using services.xml file, need to come up with a way to
handle this for JAX-WS services.

   /**
     * User can set a parameter in services.xml saying he want to show the
     * original wsdl that he put into META-INF once someone ask for ?wsdl so if
     * you want to use your own wsdl then add following parameter into
     * services.xml <parameter name="useOriginalwsdl">true</parameter>
     */
       public boolean isUseUserWSDL() {
		
		System.out.println("isUseUserWSDL: returning true");
		return true;
		
		/*Parameter parameter = getParameter("useOriginalwsdl");
		if (parameter != null) {
			String value = (String) parameter.getValue();
			if ("true".equals(value)) {
				return true;
			}
		}
		return false;*/
	}


2. If accessing user-defined WSDL, the run-time tries to retrieve the WSDL from an Axis parameter
called  WSDLConstants.WSDL_4_J_DEFINITION. Since this parameter is not being populated for
JAx-WS services, I had to modify  the code to stuff it in there. Currently, its a bit of a
hack:

In DescriptionFactory.createAxisService() :

    ServiceDescriptionImpl serviceDescriptionImpl = 
            	(ServiceDescriptionImpl) serviceDescription;
            
   Definition definition = serviceDescriptionImpl.getWSDLDefinition();
   if (definition != null)
      axisService.addParameter(WSDLConstants.WSDL_4_J_DEFINITION, definition);


Is there anything I am doing wrong? Are there any working examples of using Provider-type
web services in Axis2? 

Regards,
Sharath



      

Mime
View raw message