/* | |
* 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.spi; | |
import junit.framework.TestCase; | |
import org.apache.axis2.jaxws.description.DescriptionTestUtils2; | |
import org.apache.axis2.jaxws.description.EndpointDescription; | |
import org.apache.axis2.jaxws.description.ServiceDescription; | |
import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; | |
import org.apache.axis2.jaxws.description.builder.MDQConstants; | |
import javax.jws.WebService; | |
import javax.xml.namespace.QName; | |
import javax.xml.ws.BindingProvider; | |
import javax.xml.ws.Service; | |
import javax.xml.ws.WebServiceClient; | |
import javax.xml.ws.soap.SOAPBinding; | |
import java.net.URL; | |
import java.util.HashMap; | |
import java.util.Map; | |
/** | |
* | |
*/ | |
public class ClientMetadataPortTest extends TestCase { | |
static final String namespaceURI = "http://description.jaxws.axis2.apache.org"; | |
static final String svcLocalPart = "svcLocalPart"; | |
static final String originalWsdl = "ClientMetadata.wsdl"; | |
static final String overridenWsdl = "ClientMetadataOverriden.wsdl"; | |
static final String otherWsdl = "ClientMetadataOther.wsdl"; | |
static final String multiPortWsdl = "ClientMetadataMultiPort.wsdl"; | |
static final String originalWsdl_portLocalPart = "portLocalPart"; | |
static final String overridenWsdl_portLocalPart = "portLocalPartOverriden"; | |
static final String otherWsdl_portLocalPart = "portLocalPartOther"; | |
static final String multiPortWsdl_portLocalPart1 = "portLocalPartMulti1"; | |
static final String multiPortWsdl_portLocalPart2 = "portLocalPartMulti2"; | |
static final String multiPortWsdl_portLocalPart3 = "portLocalPartMulti3"; | |
/** | |
* Test the getPort functionality without any composite specified. | |
*/ | |
public void testOriginalGetPort() { | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(otherWsdl); | |
Service service = Service.create(wsdlUrl, serviceQName); | |
assertNotNull(service); | |
ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service); | |
assertNotNull(serviceDelegate); | |
ServiceDescription serviceDesc = serviceDelegate.getServiceDescription(); | |
assertNotNull(serviceDesc); | |
DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc); | |
assertNotNull(dbcInServiceDesc); | |
assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass()); | |
// Since this is a generic Service with no overrides, there will be no WebServiceClient annotation | |
WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot(); | |
assertNull(wsClient); | |
// WSDL was specified on the create, so make sure the right one was used by checking the ports | |
assertTrue("Wrong WSDL used", ClientMetadataTest.validatePort(service, otherWsdl_portLocalPart)); | |
QName portQN = new QName(namespaceURI, otherWsdl_portLocalPart); | |
ClientMetadataPortSEI port = service.getPort(portQN, ClientMetadataPortSEI.class); | |
assertNotNull(port); | |
} | |
/** | |
* Specify a sparse composite on a getPort call | |
*/ | |
public void testGetPortWithComposite() { | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(otherWsdl); | |
Service service = Service.create(wsdlUrl, serviceQName); | |
ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
ServiceDescription serviceDesc = serviceDelegate.getServiceDescription(); | |
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite(); | |
assertNull(ServiceDelegate.getPortMetadata()); | |
ServiceDelegate.setPortMetadata(sparseComposite); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
assertSame(sparseComposite, ServiceDelegate.getPortMetadata()); | |
QName portQN = new QName(namespaceURI, otherWsdl_portLocalPart); | |
ClientMetadataPortSEI port = service.getPort(portQN, ClientMetadataPortSEI.class); | |
assertNotNull(port); | |
assertNull(ServiceDelegate.getPortMetadata()); | |
EndpointDescription epDescArray[] = serviceDesc.getEndpointDescriptions(); | |
assertEquals(1, epDescArray.length); | |
DescriptionBuilderComposite epDBC = epDescArray[0].getDescriptionBuilderComposite(); | |
assertNotNull(epDBC); | |
assertNotSame(sparseComposite, epDBC); | |
assertSame(sparseComposite, epDBC.getSparseComposite(serviceDelegate)); | |
} | |
/** | |
* Do multiple getPorts on the same service specifiying different sparse composite. Verify that | |
* the sparse composite overwrites the previous one. | |
*/ | |
public void testMulitpleGetPortSameService() { | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(otherWsdl); | |
Service service = Service.create(wsdlUrl, serviceQName); | |
ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
ServiceDescription serviceDesc = serviceDelegate.getServiceDescription(); | |
// Do the first getPort on the first Service | |
DescriptionBuilderComposite sparseComposite1 = new DescriptionBuilderComposite(); | |
assertNull(ServiceDelegate.getPortMetadata()); | |
ServiceDelegate.setPortMetadata(sparseComposite1); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
assertSame(sparseComposite1, ServiceDelegate.getPortMetadata()); | |
QName portQN = new QName(namespaceURI, otherWsdl_portLocalPart); | |
ClientMetadataPortSEI port1 = service.getPort(portQN, ClientMetadataPortSEI.class); | |
EndpointDescription epDescArray1[] = serviceDesc.getEndpointDescriptions(); | |
assertEquals(1, epDescArray1.length); | |
DescriptionBuilderComposite epDBC1 = epDescArray1[0].getDescriptionBuilderComposite(); | |
assertNotNull(epDBC1); | |
assertNotSame(sparseComposite1, epDBC1); | |
assertSame(sparseComposite1, epDBC1.getSparseComposite(serviceDelegate)); | |
// Do a second getPort for the same port on the same service using a different composite | |
DescriptionBuilderComposite sparseComposite2 = new DescriptionBuilderComposite(); | |
assertNull(ServiceDelegate.getPortMetadata()); | |
ServiceDelegate.setPortMetadata(sparseComposite2); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
assertSame(sparseComposite2, ServiceDelegate.getPortMetadata()); | |
ClientMetadataPortSEI port2 = service.getPort(portQN, ClientMetadataPortSEI.class); | |
EndpointDescription epDescArray2[] = serviceDesc.getEndpointDescriptions(); | |
assertEquals(1, epDescArray2.length); | |
DescriptionBuilderComposite epDBC2 = epDescArray2[0].getDescriptionBuilderComposite(); | |
assertNotNull(epDBC2); | |
assertNotSame(sparseComposite2, epDBC2); | |
assertSame(sparseComposite2, epDBC1.getSparseComposite(serviceDelegate)); | |
// Verify the previous sparse composite was overwritten for this delegate | |
assertNotSame(sparseComposite1, epDBC1.getSparseComposite(serviceDelegate)); | |
} | |
/** | |
* Test multiple getPorts using different composites on different services. Validate the composite | |
* is for each service delegate is different. Note that we have to install a configuration | |
* factory that will cause the ServiceDescriptions to be cached; the default factory will | |
* not. | |
*/ | |
public void testGetPortDifferentServices() { | |
try { | |
ClientMetadataTest.installCachingFactory(); | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
QName portQN = new QName(namespaceURI, otherWsdl_portLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(otherWsdl); | |
// Create the first service | |
Service service1 = Service.create(wsdlUrl, serviceQName); | |
ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription(); | |
// Do the first getPort on the first Service | |
DescriptionBuilderComposite sparseComposite1 = new DescriptionBuilderComposite(); | |
assertNull(ServiceDelegate.getPortMetadata()); | |
ServiceDelegate.setPortMetadata(sparseComposite1); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
assertSame(sparseComposite1, ServiceDelegate.getPortMetadata()); | |
ClientMetadataPortSEI port1 = service1.getPort(portQN, ClientMetadataPortSEI.class); | |
EndpointDescription epDescArray1[] = serviceDesc1.getEndpointDescriptions(); | |
assertEquals(1, epDescArray1.length); | |
DescriptionBuilderComposite epDBC1 = epDescArray1[0].getDescriptionBuilderComposite(); | |
assertNotNull(epDBC1); | |
assertNotSame(sparseComposite1, epDBC1); | |
assertSame(sparseComposite1, epDBC1.getSparseComposite(serviceDelegate1)); | |
// Create the second service | |
Service service2 = Service.create(wsdlUrl, serviceQName); | |
ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription(); | |
// Do the getPort on the second Service | |
DescriptionBuilderComposite sparseComposite2 = new DescriptionBuilderComposite(); | |
assertNull(ServiceDelegate.getPortMetadata()); | |
ServiceDelegate.setPortMetadata(sparseComposite2); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
assertSame(sparseComposite2, ServiceDelegate.getPortMetadata()); | |
ClientMetadataPortSEI port2 = service2.getPort(portQN, ClientMetadataPortSEI.class); | |
EndpointDescription epDescArray2[] = serviceDesc2.getEndpointDescriptions(); | |
assertEquals(1, epDescArray2.length); | |
DescriptionBuilderComposite epDBC2 = epDescArray2[0].getDescriptionBuilderComposite(); | |
assertNotNull(epDBC2); | |
assertNotSame(sparseComposite2, epDBC2); | |
// Since we installed a caching configuration factory above, the ServiceDescriptions | |
// should match for the two service delegates. The EndpointDesc and the composite | |
// in the EndpointDesc should be the same. The sparse composite should be unique to | |
// each service delegate. | |
assertNotSame(serviceDelegate1, serviceDelegate2); | |
assertSame(serviceDesc1, serviceDesc2); | |
assertSame(epDBC1, epDBC2); | |
assertSame(epDescArray1[0], epDescArray2[0]); | |
assertNotSame(sparseComposite1, sparseComposite2); | |
assertSame(sparseComposite1, epDBC1.getSparseComposite(serviceDelegate1)); | |
assertSame(sparseComposite2, epDBC2.getSparseComposite(serviceDelegate2)); | |
} finally { | |
ClientMetadataTest.restoreOriginalFactory(); | |
} | |
} | |
/** | |
* Test doing GET_PORT on seperate ports under the same service. They should have unique | |
* EndpointDesriptions and the sparse composites should be unique to the service delegate and | |
* endpoint. | |
*/ | |
public void testMultiplePortsSameService() { | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
QName portQN1 = new QName(namespaceURI, multiPortWsdl_portLocalPart1); | |
QName portQN2 = new QName(namespaceURI, multiPortWsdl_portLocalPart2); | |
Service service = Service.create(wsdlUrl, serviceQName); | |
ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
ServiceDescription serviceDesc = serviceDelegate.getServiceDescription(); | |
// Do the first getPort on the first Service | |
DescriptionBuilderComposite sparseComposite1 = new DescriptionBuilderComposite(); | |
ServiceDelegate.setPortMetadata(sparseComposite1); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
assertSame(sparseComposite1, ServiceDelegate.getPortMetadata()); | |
ClientMetadataPortSEI port1 = service.getPort(portQN1, ClientMetadataPortSEI.class); | |
EndpointDescription epDescArray1[] = serviceDesc.getEndpointDescriptions(); | |
assertEquals(1, epDescArray1.length); | |
DescriptionBuilderComposite epDBC1 = epDescArray1[0].getDescriptionBuilderComposite(); | |
assertNotNull(epDBC1); | |
assertNotSame(sparseComposite1, epDBC1); | |
assertSame(sparseComposite1, epDBC1.getSparseComposite(serviceDelegate)); | |
// Do a second getPort for a different port on the same service using a different composite | |
DescriptionBuilderComposite sparseComposite2 = new DescriptionBuilderComposite(); | |
assertNull(ServiceDelegate.getPortMetadata()); | |
ServiceDelegate.setPortMetadata(sparseComposite2); | |
assertNull(ServiceDelegate.getServiceMetadata()); | |
assertSame(sparseComposite2, ServiceDelegate.getPortMetadata()); | |
ClientMetadataPortSEI port2 = service.getPort(portQN2, ClientMetadataPortSEI.class); | |
EndpointDescription epDescArray2[] = serviceDesc.getEndpointDescriptions(); | |
assertEquals(2, epDescArray2.length); | |
EndpointDescription epdPort1 = serviceDesc.getEndpointDescription(portQN1); | |
EndpointDescription epdPort2 = serviceDesc.getEndpointDescription(portQN2); | |
assertNotNull(epdPort1); | |
assertNotNull(epdPort2); | |
assertNotSame(epdPort1, epdPort2); | |
DescriptionBuilderComposite epDBC2 = epdPort2.getDescriptionBuilderComposite(); | |
assertNotNull(epDBC2); | |
assertSame(epDescArray1[0], epdPort1); | |
assertNotSame(epDBC1, epDBC2); | |
assertSame(sparseComposite2, epDBC2.getSparseComposite(serviceDelegate)); | |
assertNotSame(sparseComposite2, epDBC1.getSparseComposite(serviceDelegate)); | |
assertSame(sparseComposite1, epDBC1.getSparseComposite(serviceDelegate)); | |
assertNotSame(sparseComposite1, epDBC2.getSparseComposite(serviceDelegate)); | |
} | |
/** | |
* Validate setting a prefered port when creating the service results in a particular | |
* port being returned on the getPort(Class) call. | |
*/ | |
public void testPreferredPort() { | |
// Without setting a prefered port, the first port in the WSDL should | |
// be returned. | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
QName portQN1 = new QName(namespaceURI, multiPortWsdl_portLocalPart1); | |
Service service1 = Service.create(wsdlUrl, serviceQName); | |
ClientMetadataPortSEI port1 = service1.getPort(ClientMetadataPortSEI.class); | |
assertNotNull(port1); | |
// Get the endpoint address to verify which port we got. Note that the WSDL is setup | |
// so that the endpoint address ends with the name of the port for testing. | |
BindingProvider bindingProvider1 = (BindingProvider) port1; | |
Map<String, Object> requestContext1 = bindingProvider1.getRequestContext(); | |
String endpointAddress1 = (String) requestContext1.get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY); | |
assertNotNull(endpointAddress1); | |
// FIXME: We should get the first port in the WSDL, but that isn't working | |
// Depending on the JDK in use, the 2nd or 3rd port is returned | |
// assertTrue(endpointAddress.endsWith(multiPortWsdl_portLocalPart1)); | |
// Set a prefered port and create the service | |
QName portQN2 = new QName(namespaceURI, multiPortWsdl_portLocalPart2); | |
DescriptionBuilderComposite sparseComposite2 = new DescriptionBuilderComposite(); | |
sparseComposite2.setPreferredPort(portQN2); | |
ServiceDelegate.setServiceMetadata(sparseComposite2); | |
Service service2 = Service.create(wsdlUrl, serviceQName); | |
ClientMetadataPortSEI port2 = service2.getPort(ClientMetadataPortSEI.class); | |
BindingProvider bindingProvider2 = (BindingProvider) port2; | |
Map<String, Object> requestContext2 = bindingProvider2.getRequestContext(); | |
String endpointAddress2 = (String) requestContext2.get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY); | |
assertNotNull(endpointAddress2); | |
assertTrue(endpointAddress2.endsWith(multiPortWsdl_portLocalPart2)); | |
} | |
/** | |
* Validate setting a prefered port when creating the service results in a particular | |
* port being returned on the getPort(Class) call. The ServiceDesc in this case | |
* are cached. | |
*/ | |
public void testPreferredPortCachedService() { | |
try { | |
ClientMetadataTest.installCachingFactory(); | |
// Without setting a prefered port, the first port in the WSDL should | |
// be returned. | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
QName portQN1 = new QName(namespaceURI, multiPortWsdl_portLocalPart1); | |
Service service1 = Service.create(wsdlUrl, serviceQName); | |
ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1); | |
ServiceDescription svcDesc1 = serviceDelegate1.getServiceDescription(); | |
ClientMetadataPortSEI port1 = service1.getPort(ClientMetadataPortSEI.class); | |
assertNotNull(port1); | |
// Get the endpoint address to verify which port we got. Note that the WSDL is setup | |
// so that the endpoint address ends with the name of the port for testing. | |
BindingProvider bindingProvider1 = (BindingProvider) port1; | |
Map<String, Object> requestContext1 = bindingProvider1.getRequestContext(); | |
String endpointAddress1 = (String) requestContext1.get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY); | |
assertNotNull(endpointAddress1); | |
// FIXME: We should get the first port in the WSDL, but that isn't working | |
// Depending on the JDK in use, the 2nd or 3rd port is returned | |
// assertTrue(endpointAddress.endsWith(multiPortWsdl_portLocalPart1)); | |
// Set a prefered port and create the service | |
QName portQN2 = new QName(namespaceURI, multiPortWsdl_portLocalPart2); | |
DescriptionBuilderComposite sparseComposite2 = new DescriptionBuilderComposite(); | |
sparseComposite2.setPreferredPort(portQN2); | |
ServiceDelegate.setServiceMetadata(sparseComposite2); | |
Service service2 = Service.create(wsdlUrl, serviceQName); | |
ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2); | |
ServiceDescription svcDesc2 = serviceDelegate2.getServiceDescription(); | |
assertNotSame(service1, service2); | |
assertNotSame(serviceDelegate1, serviceDelegate2); | |
assertSame(svcDesc1, svcDesc2); | |
ClientMetadataPortSEI port2 = service2.getPort(ClientMetadataPortSEI.class); | |
BindingProvider bindingProvider2 = (BindingProvider) port2; | |
Map<String, Object> requestContext2 = bindingProvider2.getRequestContext(); | |
String endpointAddress2 = (String) requestContext2.get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY); | |
assertNotNull(endpointAddress2); | |
assertTrue(endpointAddress2.endsWith(multiPortWsdl_portLocalPart2)); | |
// Create a third service without a composite and make sure the previous composite | |
// setting of preferred port doesn't affect this one. | |
Service service3 = Service.create(wsdlUrl, serviceQName); | |
ServiceDelegate serviceDelegate3 = DescriptionTestUtils2.getServiceDelegate(service3); | |
ServiceDescription svcDesc3 = serviceDelegate3.getServiceDescription(); | |
assertNotSame(service2, service3); | |
assertNotSame(serviceDelegate1, serviceDelegate3); | |
assertNotSame(serviceDelegate2, serviceDelegate3); | |
assertSame(svcDesc1, svcDesc3); | |
ClientMetadataPortSEI port3 = service3.getPort(ClientMetadataPortSEI.class); | |
assertNotNull(port3); | |
BindingProvider bindingProvider3 = (BindingProvider) port3; | |
Map<String, Object> requestContext3 = bindingProvider3.getRequestContext(); | |
String endpointAddress3 = (String) requestContext3.get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY); | |
assertNotNull(endpointAddress1); | |
// FIXME: We should get the first port in the WSDL, but that isn't working | |
// Depending on the JDK in use, the 2nd or 3rd port is returned | |
// assertTrue(endpointAddress.endsWith(multiPortWsdl_portLocalPart1)); | |
} finally { | |
ClientMetadataTest.restoreOriginalFactory(); | |
} | |
} | |
/** | |
* Validate enabling MTOM when creating the service results ports created under that service | |
* have MTOM enabled. | |
*/ | |
public void testEnableMTOM() { | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite(); | |
sparseComposite.setIsMTOMEnabled(true); | |
ServiceDelegate.setServiceMetadata(sparseComposite); | |
Service service = Service.create(wsdlUrl, serviceQName); | |
ClientMetadataPortSEI port = service.getPort(ClientMetadataPortSEI.class); | |
assertNotNull(port); | |
// Verify that MTOM is enabled on this port. | |
BindingProvider bindingProvider = (BindingProvider) port; | |
SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding(); | |
assertTrue(binding.isMTOMEnabled()); | |
// Verify that specific ports under this service also have MTOM enabled | |
QName port1QN = new QName(namespaceURI, multiPortWsdl_portLocalPart1); | |
ClientMetadataPortSEI port1 = service.getPort(port1QN, ClientMetadataPortSEI.class); | |
SOAPBinding binding1 = ((SOAPBinding) ((BindingProvider) port1).getBinding()); | |
assertTrue(binding1.isMTOMEnabled()); | |
QName port2QN = new QName(namespaceURI, multiPortWsdl_portLocalPart2); | |
ClientMetadataPortSEI port2 = service.getPort(port2QN, ClientMetadataPortSEI.class); | |
SOAPBinding binding2 = ((SOAPBinding) ((BindingProvider) port2).getBinding()); | |
assertTrue(binding2.isMTOMEnabled()); | |
} | |
/** | |
* Validate enabling MTOM when creating the service results ports created under that service | |
* have MTOM enabled. | |
*/ | |
public void testEnableMTOMFromServiceDBC() { | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite(); | |
Map<String, Boolean> seiToMTOM = new HashMap<String, Boolean>(); | |
seiToMTOM.put(ClientMetadataPortSEI.class.getName(), true); | |
sparseComposite.getProperties().put(MDQConstants.SEI_MTOM_ENABLEMENT_MAP, seiToMTOM); | |
ServiceDelegate.setServiceMetadata(sparseComposite); | |
Service service = Service.create(wsdlUrl, serviceQName); | |
ClientMetadataPortSEI port = service.getPort(ClientMetadataPortSEI.class); | |
assertNotNull(port); | |
// Verify that MTOM is enabled on this port. | |
BindingProvider bindingProvider = (BindingProvider) port; | |
SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding(); | |
assertTrue(binding.isMTOMEnabled()); | |
// Verify that specific ports under this service also have MTOM enabled | |
QName port1QN = new QName(namespaceURI, multiPortWsdl_portLocalPart1); | |
ClientMetadataPortSEI port1 = service.getPort(port1QN, ClientMetadataPortSEI.class); | |
SOAPBinding binding1 = ((SOAPBinding) ((BindingProvider) port1).getBinding()); | |
assertTrue(binding1.isMTOMEnabled()); | |
QName port2QN = new QName(namespaceURI, multiPortWsdl_portLocalPart2); | |
ClientMetadataPortSEI port2 = service.getPort(port2QN, ClientMetadataPortSEI.class); | |
SOAPBinding binding2 = ((SOAPBinding) ((BindingProvider) port2).getBinding()); | |
assertTrue(binding2.isMTOMEnabled()); | |
} | |
/** | |
* Validate enabling MTOM when creating the service results ports created under that service | |
* have MTOM enabled. | |
*/ | |
public void testDisableMTOMFromServiceDBC() { | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite(); | |
Map<String, Boolean> seiToMTOM = new HashMap<String, Boolean>(); | |
seiToMTOM.put(ClientMetadataPortSEI.class.getName(), false); | |
sparseComposite.getProperties().put(MDQConstants.SEI_MTOM_ENABLEMENT_MAP, seiToMTOM); | |
ServiceDelegate.setServiceMetadata(sparseComposite); | |
Service service = Service.create(wsdlUrl, serviceQName); | |
ClientMetadataPortSEI port = service.getPort(ClientMetadataPortSEI.class); | |
assertNotNull(port); | |
// Verify that MTOM is enabled on this port. | |
BindingProvider bindingProvider = (BindingProvider) port; | |
SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding(); | |
assertTrue(!binding.isMTOMEnabled()); | |
// Verify that specific ports under this service also have MTOM enabled | |
QName port1QN = new QName(namespaceURI, multiPortWsdl_portLocalPart1); | |
ClientMetadataPortSEI port1 = service.getPort(port1QN, ClientMetadataPortSEI.class); | |
SOAPBinding binding1 = ((SOAPBinding) ((BindingProvider) port1).getBinding()); | |
assertTrue(!binding1.isMTOMEnabled()); | |
QName port2QN = new QName(namespaceURI, multiPortWsdl_portLocalPart2); | |
ClientMetadataPortSEI port2 = service.getPort(port2QN, ClientMetadataPortSEI.class); | |
SOAPBinding binding2 = ((SOAPBinding) ((BindingProvider) port2).getBinding()); | |
assertTrue(!binding2.isMTOMEnabled()); | |
} | |
/** | |
* Validate enabling MTOM when creating the service results in enablement only | |
* for that service delegate, and not a different service delegate referencing | |
* the same service. | |
*/ | |
public void testEnableMTOMCachedService() { | |
try { | |
ClientMetadataTest.installCachingFactory(); | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite(); | |
sparseComposite.setIsMTOMEnabled(true); | |
ServiceDelegate.setServiceMetadata(sparseComposite); | |
Service service1 = Service.create(wsdlUrl, serviceQName); | |
Service service2 = Service.create(wsdlUrl, serviceQName); | |
QName portQN = new QName(namespaceURI, multiPortWsdl_portLocalPart1); | |
ClientMetadataPortSEI port1 = service1.getPort(portQN, ClientMetadataPortSEI.class); | |
ClientMetadataPortSEI port2 = service2.getPort(portQN, ClientMetadataPortSEI.class); | |
SOAPBinding binding1 = ((SOAPBinding) ((BindingProvider) port1).getBinding()); | |
assertTrue(binding1.isMTOMEnabled()); | |
SOAPBinding binding2 = ((SOAPBinding) ((BindingProvider) port2).getBinding()); | |
assertFalse(binding2.isMTOMEnabled()); | |
} finally { | |
ClientMetadataTest.restoreOriginalFactory(); | |
} | |
} | |
/** | |
* Validate enabling the setting of properties on the BindingProvider based | |
* on a map of properties supplied to the sparse composite. | |
*/ | |
public void testSetBindingProperties() { | |
try { | |
ClientMetadataTest.installCachingFactory(); | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
QName portQN = new QName(namespaceURI, multiPortWsdl_portLocalPart1); | |
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite(); | |
sparseComposite.setIsMTOMEnabled(true); | |
Map<String, Map<String, Object>> allBindingProps = new HashMap<String, Map<String,Object>>(); | |
String key = ClientMetadataPortSEI.class.getName() + ":" + portQN.toString(); | |
Map<String, Object> bindingProps = new HashMap<String, Object>(); | |
bindingProps.put("customProperty", "someValue"); | |
allBindingProps.put(key, bindingProps); | |
sparseComposite.getProperties().put(MDQConstants.BINDING_PROPS_MAP, allBindingProps); | |
ServiceDelegate.setServiceMetadata(sparseComposite); | |
Service service1 = Service.create(wsdlUrl, serviceQName); | |
ClientMetadataPortSEI port1 = service1.getPort(portQN, ClientMetadataPortSEI.class); | |
BindingProvider bp = (BindingProvider) port1; | |
assertNotNull(bp.getRequestContext().get("customProperty")); | |
assertEquals(bp.getRequestContext().get("customProperty"), "someValue"); | |
} finally { | |
ClientMetadataTest.restoreOriginalFactory(); | |
} | |
} | |
/** | |
* This will validate that the properties to be set on the BindingProvider, via | |
* the sparse composite, can be correctly scoped at the port level. | |
*/ | |
public void testNoSetBindingProperties() { | |
try { | |
ClientMetadataTest.installCachingFactory(); | |
QName serviceQName = new QName(namespaceURI, svcLocalPart); | |
URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl); | |
QName portQN = new QName(namespaceURI, multiPortWsdl_portLocalPart2); | |
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite(); | |
sparseComposite.setIsMTOMEnabled(true); | |
Map<String, Map<String, Object>> allBindingProps = new HashMap<String, Map<String,Object>>(); | |
String key = ClientMetadataPortSEI.class.getName() + ":" + portQN.toString(); | |
Map<String, Object> bindingProps = new HashMap<String, Object>(); | |
bindingProps.put("customProperty", "someValue"); | |
allBindingProps.put(key, bindingProps); | |
sparseComposite.getProperties().put(MDQConstants.BINDING_PROPS_MAP, allBindingProps); | |
ServiceDelegate.setServiceMetadata(sparseComposite); | |
Service service1 = Service.create(wsdlUrl, serviceQName); | |
ClientMetadataPortSEI port1 = service1.getPort(new QName(namespaceURI, multiPortWsdl_portLocalPart1), | |
ClientMetadataPortSEI.class); | |
BindingProvider bp = (BindingProvider) port1; | |
assertNull(bp.getRequestContext().get("customProperty")); | |
} finally { | |
ClientMetadataTest.restoreOriginalFactory(); | |
} | |
} | |
} | |
@WebService(name="EchoMessagePortType", targetNamespace="http://description.jaxws.axis2.apache.org") | |
interface ClientMetadataPortSEI { | |
public String echoMessage(String string); | |
} |