blob: 9080c62570f6f6bcf52752fa8f70c23e8e6efc81 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.axis2.jaxws.providerapi;
import junit.framework.TestCase;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.jaxws.description.DescriptionFactory;
import org.apache.axis2.jaxws.description.EndpointDescription;
import org.apache.axis2.jaxws.description.EndpointInterfaceDescription;
import org.apache.axis2.jaxws.description.OperationDescription;
import org.apache.axis2.jaxws.description.ServiceDescription;
import org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
import javax.xml.ws.Provider;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
import javax.xml.ws.http.HTTPBinding;
/**
*
*/
public class GenericOperationProviderTest extends TestCase {
public void testGenericHTTPBindingOperation() {
// The HTTP binding supports a generic operation for WSDL-less endpoints.
ServiceDescription serviceDesc = DescriptionFactory.createServiceDescription(HTTPBindingProviderImpl.class);
assertNotNull(serviceDesc);
EndpointDescription endpointDesc = serviceDesc.getEndpointDescriptions_AsCollection().iterator().next();
assertNotNull(endpointDesc);
AxisService axisSvc = endpointDesc.getAxisService();
assertNotNull(axisSvc);
EndpointInterfaceDescription interfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNotNull(interfaceDesc);
// There should be a single OpDesc with a single AxisOperation with a specific name
OperationDescription opDescs[] = interfaceDesc.getOperations();
assertNotNull(opDescs);
assertEquals(1, opDescs.length);
AxisOperation axisOperation = opDescs[0].getAxisOperation();
assertNotNull(axisOperation);
assertEquals(EndpointInterfaceDescription.JAXWS_NOWSDL_PROVIDER_OPERATION_NAME, axisOperation.getName().getLocalPart());
// Now verify that the special dispather can find this operation
GenericProviderDispatcher dispatcher = new GenericProviderDispatcher();
MessageContext messageContext = new MessageContext();
messageContext.setAxisService(axisSvc);
try {
// The dispatcher will not try to resolve an AxisService
assertNull(dispatcher.findService(messageContext));
// The dispatcher should find the special AxisOperation
assertEquals(axisOperation, dispatcher.findOperation(axisSvc, messageContext));
} catch (AxisFault e) {
fail("Unexpected exception" + e);
}
}
public void _testGenericSOAPBindingOperation() {
// REVIEW: Currently generic operations are not supported for SOAP Bindings
ServiceDescription serviceDesc = DescriptionFactory.createServiceDescription(SOAPBindingProviderImpl.class);
assertNotNull(serviceDesc);
EndpointDescription endpointDesc = serviceDesc.getEndpointDescriptions_AsCollection().iterator().next();
assertNotNull(endpointDesc);
AxisService axisSvc = endpointDesc.getAxisService();
assertNotNull(axisSvc);
// Since there's no WSDL, there will be no operations and no EndpointInterfaceDescription
// because this is a SOAPBinding.
EndpointInterfaceDescription interfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNull(interfaceDesc);
}
public void testSEIBasedEndpoint() {
ServiceDescription serviceDesc = DescriptionFactory.createServiceDescription(SEIBasedEndpoint.class);
assertNotNull(serviceDesc);
EndpointDescription endpointDesc = serviceDesc.getEndpointDescriptions_AsCollection().iterator().next();
assertNotNull(endpointDesc);
AxisService axisSvc = endpointDesc.getAxisService();
assertNotNull(axisSvc);
EndpointInterfaceDescription interfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNotNull(interfaceDesc);
// There should be a single OpDesc with a single AxisOperation based on the SEI below
// But it should not be the special named operation and the special dispatcher should not
// return null for operation dispatch
OperationDescription opDescs[] = interfaceDesc.getOperations();
assertNotNull(opDescs);
assertEquals(1, opDescs.length);
AxisOperation axisOperation = opDescs[0].getAxisOperation();
assertNotNull(axisOperation);
if (EndpointInterfaceDescription.JAXWS_NOWSDL_PROVIDER_OPERATION_NAME.equals(axisOperation.getName().getLocalPart())) {
fail("Operation has the generic provider name");
}
// Now verify that the special dispather doesn't find the special operation
GenericProviderDispatcher dispatcher = new GenericProviderDispatcher();
MessageContext messageContext = new MessageContext();
messageContext.setAxisService(axisSvc);
try {
// The dispatcher will not try to resolve an AxisService
assertNull(dispatcher.findService(messageContext));
// The dispatcher should find the special AxisOperation
assertNull(dispatcher.findOperation(axisSvc, messageContext));
} catch (AxisFault e) {
fail("Unexpected exception" + e);
}
}
}
// Notice no WSDL is specified
@WebServiceProvider()
@BindingType(value=HTTPBinding.HTTP_BINDING)
@ServiceMode(value=javax.xml.ws.Service.Mode.MESSAGE)
class HTTPBindingProviderImpl implements Provider<String> {
public String invoke(String obj) {
// TODO Auto-generated method stub
return null;
}
}
//Notice no WSDL is specified
@WebServiceProvider()
class SOAPBindingProviderImpl implements Provider<String> {
public String invoke(String obj) {
// TODO Auto-generated method stub
return null;
}
}
// SEI based endpoint to make sure it doesn't get get the special generic provider operation added
@WebService()
class SEIBasedEndpoint {
public String echo() {
return null;
}
}