You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2010/07/13 11:12:09 UTC
svn commit: r963624 [1/2] - in /tuscany/sca-java-2.x/trunk:
compliance-tests/assembly/src/test/resources/ itest/bpel/helloworld/
itest/databindings/jaxb-top-down/src/main/resources/wsdl/wrapped/
itest/interfaces/src/main/java/org/apache/tuscany/sca/ite...
Author: slaws
Date: Tue Jul 13 09:12:08 2010
New Revision: 963624
URL: http://svn.apache.org/viewvc?rev=963624&view=rev
Log:
TUSCANY-3616 - Add code to check that that interface contracts a reference and reference binding and at service and service binding match. Motivated by BWS_2007. TO do this properly we have to test that the interfaces are described using the same IDL and if not convert to WSDL1.1 are required by the SCA specifications. There are a lot of changes here as doing this upset quite a few tests. Further work is required to look at the details of our WSDL generation process which looks a little suspect around wrapper namespaces.
Added:
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ContractBuilder.java
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WSDLContractBuilder.java
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ContractBuilder
Removed:
tuscany/sca-java-2.x/trunk/itest/jms/format-jmsobject/src/main/resources/jmsobject/helloworld.wsdl
tuscany/sca-java-2.x/trunk/itest/jms/format-jmstextxml/src/main/java/org/apache/tuscany/sca/binding/jms/format/jmsbytes/helloworld/
Modified:
tuscany/sca-java-2.x/trunk/compliance-tests/assembly/src/test/resources/tuscany-oasis-sca-tests-errors.properties
tuscany/sca-java-2.x/trunk/itest/bpel/helloworld/pom.xml
tuscany/sca-java-2.x/trunk/itest/databindings/jaxb-top-down/src/main/resources/wsdl/wrapped/hello-service.wsdl
tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponent.java
tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponentImpl.java
tuscany/sca-java-2.x/trunk/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfacesTestCase.java
tuscany/sca-java-2.x/trunk/itest/jms/format-jmsobject/src/main/resources/jmsobject/helloworld.composite
tuscany/sca-java-2.x/trunk/itest/jms/format-jmstextxml/src/main/resources/jmstextxml/helloworld.wsdl
tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/CustomerProfileData.java
tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/customerdata.xsd
tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/questionmark-include.wsdl
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReferenceImpl.java
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContract.java
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractImpl.java
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties
tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterfaceContract.java
tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestRuntimeWire.java
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGenerator.java
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositeComponentTypeBuilderImpl.java
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpoint.java
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeEndpointReference.java
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointReferenceImpl.java
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterfaceContract.java
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceContractImpl.java
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLInterfaceContractImpl.java
Modified: tuscany/sca-java-2.x/trunk/compliance-tests/assembly/src/test/resources/tuscany-oasis-sca-tests-errors.properties
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/compliance-tests/assembly/src/test/resources/tuscany-oasis-sca-tests-errors.properties?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/compliance-tests/assembly/src/test/resources/tuscany-oasis-sca-tests-errors.properties (original)
+++ tuscany/sca-java-2.x/trunk/compliance-tests/assembly/src/test/resources/tuscany-oasis-sca-tests-errors.properties Tue Jul 13 09:12:08 2010
@@ -80,8 +80,8 @@ ASM_9005=org.apache.tuscany.sca.monitor.
ASM_10001=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_10001, Artifact: META-INF/definitions.xml, Definitions: jar:file:***ASM_10001***.zip!/META-INF/definitions.xml] - [ASM10001,POL30002] Duplicate intent {http://docs.oasis-open.org/ns/opencsa/scatests/200903}Fred found in domain
ASM_10003=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_10003, Artifact: META-INF/definitions.xml, Definitions: jar:file:***ASM_10003***.zip!/META-INF/definitions.xml] - XMLSchema validation error occured in: Test_ASM_10003.composite ,line = ***, column = ***, Message = cvc-complex-type.2.4.a: Invalid content was found starting with element 'component'. One of '{"http://docs.oasis-open.org/ns/opencsa/sca/200912":documentation, "http://docs.oasis-open.org/ns/opencsa/sca/200912":intent, "http://docs.oasis-open.org/ns/opencsa/sca/200912":policySet, "http://docs.oasis-open.org/ns/opencsa/sca/200912":bindingType, "http://docs.oasis-open.org/ns/opencsa/sca/200912":implementationType, WC[##other:"http://docs.oasis-open.org/ns/opencsa/sca/200912"]}' is expected.
ASM_12003=org.apache.tuscany.sca.contribution.processor.ContributionResolveException: Invalid interface when resolving
-ASM_12007=org.apache.tuscany.sca.monitor.ValidationException: [Composite: {http://docs.oasis-open.org/ns/opencsa/sca/200912}, Component: TestComponent1] - [ASM50004,JCA30002,JCI80001] Component service interface incompatible with implementation service interface: Component = TestComponent1 Service = Service1 Operation operation1 not found on target
-ASM_12008=org.apache.tuscany.sca.monitor.ValidationException: [Composite: {http://docs.oasis-open.org/ns/opencsa/sca/200912}, Component: TEST_ASM_12008TestComponent1] - [ASM50004,JCA30002,JCI80001] Component service interface incompatible with implementation service interface: Component = TEST_ASM_12008TestComponent1 Service = Service1 Operation operation1 not found on target
+ASM_12007=org.apache.tuscany.sca.monitor.ValidationException: [Composite: {http://docs.oasis-open.org/ns/opencsa/sca/200912}, Component: TestComponent1, Composite: {http://docs.oasis-open.org/ns/opencsa/scatests/2009032}TestComposite5, Component: TestComposite5TestComponent1] - [ASM50004,JCA30002,JCI80001] Component service interface incompatible with implementation service interface: Component = TestComposite5TestComponent1 Service = Service1 Operations called operation2 are not compatible Operation argument types source = {http://www.w3.org/2001/XMLSchema}int target = {http://www.w3.org/2001/XMLSchema}string don't match for output types
+ASM_12008=org.apache.tuscany.sca.monitor.ValidationException: [Composite: {http://docs.oasis-open.org/ns/opencsa/sca/200912}, Component: TEST_ASM_12008TestComponent1, Composite: {http://docs.oasis-open.org/ns/opencsa/scatests/2009032}TestComposite5, Component: TestComposite5TestComponent1] - [ASM50004,JCA30002,JCI80001] Component service interface incompatible with implementation service interface: Component = TestComposite5TestComponent1 Service = Service1 Operations called operation2 are not compatible Operation argument types source = {http://www.w3.org/2001/XMLSchema}int target = {http://www.w3.org/2001/XMLSchema}string don't match for output types
ASM_12011=org.apache.tuscany.sca.monitor.ValidationException: [Composite: {http://docs.oasis-open.org/ns/opencsa/sca/200912}, Component: TestComponent1] - [ASM60030,JCI50004,JCI80001] Component implementation not resolved: Component = TestComponent1 Uri = TestComponent1
ASM_12012=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_12012, Artifact: META-INF/sca-contribution.xml] - XMLSchema validation error occured in: jar:file:***ASM_12012***.zip!/META-INF/sca-contribution.xml ,line = ***, column = ***, Message = cvc-complex-type.2.4.a: Invalid content was found starting with element 'component'. One of '{"http://docs.oasis-open.org/ns/opencsa/sca/200912":documentation, "http://docs.oasis-open.org/ns/opencsa/sca/200912":deployable, "http://docs.oasis-open.org/ns/opencsa/sca/200912":importBase, "http://docs.oasis-open.org/ns/opencsa/sca/200912":exportBase, WC[##other:"http://docs.oasis-open.org/ns/opencsa/sca/200912"]}' is expected.
ASM_13001=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_13001, Artifact: Test_ASM_13001.composite] - XMLSchema validation error occured in: Test_ASM_13001.composite ,line = ***, column = ***, Message = cvc-complex-type.2.4.a: Invalid content was found starting with element 'sevrice'. One of '{"http://docs.oasis-open.org/ns/opencsa/sca/200912":service, "http://docs.oasis-open.org/ns/opencsa/sca/200912":reference, "http://docs.oasis-open.org/ns/opencsa/sca/200912":property, "http://docs.oasis-open.org/ns/opencsa/sca/200912":requires, "http://docs.oasis-open.org/ns/opencsa/sca/200912":policySetAttachment, WC[##other:"http://docs.oasis-open.org/ns/opencsa/sca/200912"]}' is expected.
@@ -91,4 +91,4 @@ ASM_13004=org.apache.tuscany.sca.monitor
ASM_13005=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_13005, Artifact: Test_ASM_13005.composite] - XMLSchema validation error occured in: Test_ASM_13005.composite ,line = ***, column = ***, Message = cvc-elt.2: The value of {abstract} in the element declaration for 'implementation' must be false.
ASM_13006=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_13006, Artifact: Test_ASM_13006.composite] - XMLSchema validation error occured in: Test_ASM_13006.composite ,line = ***, column = ***, Message = cvc-complex-type.3.2.2: Attribute 'callback' is not allowed to appear in element 'interface.java'.
ASM_13007=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_13007, Artifact: Test_ASM_13007.composite] - XMLSchema validation error occured in: Test_ASM_13007.composite ,line = ***, column = ***, Message = cvc-complex-type.3.2.2: Attribute 'mulplicity' is not allowed to appear in element 'reference'.
-ASM_13008=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_13008, Artifact: Test_ASM_13008.composite] - XMLSchema validation error occured in: Test_ASM_13008.composite ,line = ***, column = ***, Message = cvc-complex-type.2.4.a: Invalid content was found starting with element 'operation'. One of '{"http://docs.oasis-open.org/ns/opencsa/sca/200912":documentation, "http://docs.oasis-open.org/ns/opencsa/sca/200912":wireFormat, "http://docs.oasis-open.org/ns/opencsa/sca/200912":operationSelector, "http://docs.oasis-open.org/ns/opencsa/sca/200912":requires, "http://docs.oasis-open.org/ns/opencsa/sca/200912":policySetAttachment}' is expected.
\ No newline at end of file
+ASM_13008=org.apache.tuscany.sca.monitor.ValidationException: [Contribution: ASM_13008, Artifact: Test_ASM_13008.composite] - XMLSchema validation error occured in: Test_ASM_13008.composite ,line = ***, column = ***, Message = cvc-complex-type.2.4.a: Invalid content was found starting with element 'operation'. One of '{"http://docs.oasis-open.org/ns/opencsa/sca/200912":documentation, "http://docs.oasis-open.org/ns/opencsa/sca/200912":wireFormat, "http://docs.oasis-open.org/ns/opencsa/sca/200912":operationSelector, "http://docs.oasis-open.org/ns/opencsa/sca/200912":requires, "http://docs.oasis-open.org/ns/opencsa/sca/200912":policySetAttachment}' is expected.
Modified: tuscany/sca-java-2.x/trunk/itest/bpel/helloworld/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/bpel/helloworld/pom.xml?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/bpel/helloworld/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/itest/bpel/helloworld/pom.xml Tue Jul 13 09:12:08 2010
@@ -56,6 +56,12 @@
<version>2.0-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-wsdlgen</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>xerces</groupId>
Modified: tuscany/sca-java-2.x/trunk/itest/databindings/jaxb-top-down/src/main/resources/wsdl/wrapped/hello-service.wsdl
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/databindings/jaxb-top-down/src/main/resources/wsdl/wrapped/hello-service.wsdl?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/databindings/jaxb-top-down/src/main/resources/wsdl/wrapped/hello-service.wsdl (original)
+++ tuscany/sca-java-2.x/trunk/itest/databindings/jaxb-top-down/src/main/resources/wsdl/wrapped/hello-service.wsdl Tue Jul 13 09:12:08 2010
@@ -28,7 +28,8 @@
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
- <xs:schema targetNamespace="http://util.java/"
+ <!-- <xs:schema targetNamespace="http://util.java/" -->
+ <xs:schema targetNamespace=""
version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="arrayList">
<xs:complexContent>
Modified: tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponent.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponent.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponent.java (original)
+++ tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponent.java Tue Jul 13 09:12:08 2010
@@ -28,11 +28,11 @@ public interface LocalClientComponent {
String foo1(ParameterObject po);
- String foo1(String str) throws Exception;
+ String foo2(String str) throws Exception;
- String foo2(String str, int i);
+ String foo3(String str, int i);
- String foo2(int i, String str) throws Exception;
+ String foo4(int i, String str) throws Exception;
void callback(String str);
Modified: tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponentImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponentImpl.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponentImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/LocalClientComponentImpl.java Tue Jul 13 09:12:08 2010
@@ -35,15 +35,15 @@ public class LocalClientComponentImpl im
return "AComponent";
}
- public String foo1(String str) throws Exception {
+ public String foo2(String str) throws Exception {
return str + "AComponent";
}
- public String foo2(String str, int i) {
+ public String foo3(String str, int i) {
return str + "AComponent" + i;
}
- public String foo2(int i, String str) throws Exception {
+ public String foo4(int i, String str) throws Exception {
return str + "AComponent" + i;
}
Modified: tuscany/sca-java-2.x/trunk/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfacesTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfacesTestCase.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfacesTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfacesTestCase.java Tue Jul 13 09:12:08 2010
@@ -60,10 +60,10 @@ public class InterfacesTestCase {
assertEquals("AComponent", local.foo1(po));
assertEquals("AComponent", po.field1);
- assertEquals("AAComponent", local.foo1("A"));
+ assertEquals("AAComponent", local.foo2("A"));
- assertEquals("AAComponent1", local.foo2("A", 1));
- assertEquals("AAComponent1", local.foo2(1, "A"));
+ assertEquals("AAComponent1", local.foo3("A", 1));
+ assertEquals("AAComponent1", local.foo4(1, "A"));
} catch (Exception e) {
fail();
}
Modified: tuscany/sca-java-2.x/trunk/itest/jms/format-jmsobject/src/main/resources/jmsobject/helloworld.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/jms/format-jmsobject/src/main/resources/jmsobject/helloworld.composite?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/jms/format-jmsobject/src/main/resources/jmsobject/helloworld.composite (original)
+++ tuscany/sca-java-2.x/trunk/itest/jms/format-jmsobject/src/main/resources/jmsobject/helloworld.composite Tue Jul 13 09:12:08 2010
@@ -42,7 +42,6 @@
<component name="HelloWorldServiceComponent1">
<implementation.java class="org.apache.tuscany.sca.binding.jms.format.jmsobject.helloworld.HelloWorldServiceImpl" />
<service name="HelloWorldService">
- <interface.wsdl interface="http://helloworld.jmsobject.format.jms.binding.sca.tuscany.apache.org/#wsdl.interface(HelloWorldService)"/>
<binding.jms>
<tuscany:wireFormat.jmsObject wrapSingle="true"/>
<destination jndiName="HelloWorldService1"/>
Modified: tuscany/sca-java-2.x/trunk/itest/jms/format-jmstextxml/src/main/resources/jmstextxml/helloworld.wsdl
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/jms/format-jmstextxml/src/main/resources/jmstextxml/helloworld.wsdl?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/jms/format-jmstextxml/src/main/resources/jmstextxml/helloworld.wsdl (original)
+++ tuscany/sca-java-2.x/trunk/itest/jms/format-jmstextxml/src/main/resources/jmstextxml/helloworld.wsdl Tue Jul 13 09:12:08 2010
@@ -65,7 +65,13 @@
</complexType>
</element>
- <element name="CheckedException" type="xsd:string" />
+ <element name="CheckedException" type="CheckedException" />
+
+ <complexType name="CheckedException">
+ <sequence>
+ <element minOccurs="0" name="message" type="xsd:string" />
+ </sequence>
+ </complexType>
</schema>
Modified: tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/CustomerProfileData.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/CustomerProfileData.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/CustomerProfileData.java (original)
+++ tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/CustomerProfileData.java Tue Jul 13 09:12:08 2010
@@ -33,6 +33,16 @@ public class CustomerProfileData {
private String loginID;
private String password;
private int id;
+
+ public CustomerProfileData() {
+ firstName = "John";
+ lastName = "Doe";
+ address = "345 Main Street";
+ email = "john@doe.org";
+ this.loginID = "DefaultloginID";
+ password = "hello";
+ id = 1234;
+ }
public CustomerProfileData(String loginID) {
firstName = "John";
Modified: tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/customerdata.xsd
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/customerdata.xsd?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/customerdata.xsd (original)
+++ tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/customerdata.xsd Tue Jul 13 09:12:08 2010
@@ -21,7 +21,7 @@
targetNamespace="http://accounts"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:complexType name="CustomerProfileData">
+ <xsd:complexType name="customerProfileData">
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string" />
<xsd:element name="lastName" type="xsd:string" />
Modified: tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/questionmark-include.wsdl
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/questionmark-include.wsdl?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/questionmark-include.wsdl (original)
+++ tuscany/sca-java-2.x/trunk/itest/ws/wsdl/src/main/resources/org/apache/tuscany/sca/binding/ws/axis2/questionmark-include.wsdl Tue Jul 13 09:12:08 2010
@@ -44,11 +44,7 @@
<xsd:complexType>
<xsd:sequence>
<xsd:element name="customerProfile"
- type="xsd:string" />
- <!--
- <xsd:element name="customerProfile"
- type="account:CustomerProfileData" />
- -->
+ type="account:customerProfileData" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java Tue Jul 13 09:12:08 2010
@@ -33,6 +33,28 @@ import org.apache.tuscany.sca.assembly.I
* @tuscany.spi.extension.asclient
*/
public interface BuilderExtensionPoint {
+
+ /**
+ * Adds a contract builder.
+ *
+ * @param compositeBuilder
+ */
+ void addContractBuilder(ContractBuilder contractBuilder);
+
+ /**
+ * Removes a contract builder.
+ *
+ * @param compositeBuilder
+ */
+ void removeContractBuilder(ContractBuilder contractBuilder);
+
+ /**
+ * Returns the contract builder
+ *
+ * @param id
+ * @return
+ */
+ ContractBuilder getContractBuilder();
/**
* Adds a composite builder.
Added: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ContractBuilder.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ContractBuilder.java?rev=963624&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ContractBuilder.java (added)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ContractBuilder.java Tue Jul 13 09:12:08 2010
@@ -0,0 +1,37 @@
+/*
+ * 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.tuscany.sca.assembly.builder;
+
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+
+/**
+ * A builder that builds WSDL versions of component contracts so that the
+ * component contracts can be compared with binding contracts in a generic way.
+ * The generic interface format defined by the Assembly spec is WSDL 1.1
+ */
+public interface ContractBuilder {
+
+ /**
+ * Build the WSDL version of the Interface Contract
+ */
+ boolean build(InterfaceContract interfaceContract, BuilderContext context);
+}
Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java Tue Jul 13 09:12:08 2010
@@ -41,6 +41,7 @@ import org.apache.tuscany.sca.core.Utili
import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
import org.apache.tuscany.sca.extensibility.ServiceDeclarationParser;
import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
/**
@@ -56,6 +57,7 @@ public class DefaultBuilderExtensionPoin
private final Map<QName, ImplementationBuilder> implementationBuilders =
new HashMap<QName, ImplementationBuilder>();
private final Map<QName, PolicyBuilder> policyBuilders = new HashMap<QName, PolicyBuilder>();
+ private ContractBuilder contractBuilder = null;
private boolean loaded;
@@ -85,6 +87,19 @@ public class DefaultBuilderExtensionPoin
loadBuilders();
return builders.get(id);
}
+
+ public void addContractBuilder(ContractBuilder contractBuilder){
+ this.contractBuilder = contractBuilder;
+ }
+
+ public void removeContractBuilder(ContractBuilder contractBuilder){
+ this.contractBuilder = null;
+ }
+
+ public ContractBuilder getContractBuilder(){
+ loadBuilders();
+ return contractBuilder;
+ }
/**
* Load builders declared under META-INF/services.
@@ -147,6 +162,16 @@ public class DefaultBuilderExtensionPoin
PolicyBuilder<?> builder = new LazyPolicyBuilder(builderDeclaration);
policyBuilders.put(builder.getPolicyType(), builder);
}
+
+ try {
+ builderDeclarations = serviceDiscovery.getServiceDeclarations(ContractBuilder.class);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+
+ for (ServiceDeclaration builderDeclaration : builderDeclarations) {
+ contractBuilder = new LazyContractBuilder(builderDeclaration);
+ }
loaded = true;
@@ -405,4 +430,50 @@ public class DefaultBuilderExtensionPoin
return getBuilder().build(endpointReference, endpoint, context);
}
}
+
+ private class LazyContractBuilder implements ContractBuilder {
+ private ServiceDeclaration sd;
+ private ContractBuilder builder;
+
+ /**
+ * @param sd
+ */
+ public LazyContractBuilder(ServiceDeclaration sd) {
+ super();
+ this.sd = sd;
+ }
+
+/*
+ public boolean build(EndpointReference endpointReference, BuilderContext context){
+ return getBuilder().build(endpointReference, context);
+ }
+
+ public boolean build(Endpoint endpoint, BuilderContext context){
+ return getBuilder().build(endpoint, context);
+ }
+*/
+
+ public boolean build(InterfaceContract interfaceContract, BuilderContext context){
+ return getBuilder().build(interfaceContract, context);
+ }
+
+ private synchronized ContractBuilder getBuilder() {
+ if (builder == null) {
+ try {
+ Class<?> builderClass = sd.loadClass();
+ try {
+ Constructor<?> constructor = builderClass.getConstructor(ExtensionPointRegistry.class);
+ builder = (ContractBuilder)constructor.newInstance(registry);
+ } catch (NoSuchMethodException e) {
+ Constructor<?> constructor = builderClass.getConstructor();
+ builder = (ContractBuilder)constructor.newInstance();
+
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return builder;
+ }
+ }
}
Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java Tue Jul 13 09:12:08 2010
@@ -26,6 +26,8 @@ import org.apache.tuscany.sca.assembly.C
import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.Endpoint;
import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
+import org.apache.tuscany.sca.assembly.builder.ContractBuilder;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.policy.ExtensionType;
@@ -42,6 +44,8 @@ public class EndpointImpl implements End
private static final long serialVersionUID = 7344399683703812593L;
protected transient ExtensionPointRegistry registry;
+ protected transient BuilderExtensionPoint builders;
+ protected transient ContractBuilder contractBuilder;
protected boolean unresolved;
protected String uri;
protected Component component;
Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReferenceImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReferenceImpl.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReferenceImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointReferenceImpl.java Tue Jul 13 09:12:08 2010
@@ -26,6 +26,8 @@ import org.apache.tuscany.sca.assembly.C
import org.apache.tuscany.sca.assembly.ComponentReference;
import org.apache.tuscany.sca.assembly.Endpoint;
import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
+import org.apache.tuscany.sca.assembly.builder.ContractBuilder;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.policy.ExtensionType;
@@ -41,7 +43,9 @@ import org.apache.tuscany.sca.policy.Pol
public class EndpointReferenceImpl implements EndpointReference {
private static final long serialVersionUID = 8838066441709300972L;
- protected ExtensionPointRegistry registry;
+ protected transient ExtensionPointRegistry registry;
+ protected transient BuilderExtensionPoint builders;
+ protected transient ContractBuilder contractBuilder;
protected boolean unresolved = true;
protected String uri;
protected Component component;
Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContract.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContract.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContract.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContract.java Tue Jul 13 09:12:08 2010
@@ -78,5 +78,23 @@ public interface InterfaceContract exten
* Implementations must support cloning.
*/
Object clone() throws CloneNotSupportedException;
+
+ /**
+ * For matching purposes the Java interface contract is
+ * turned into a WSDL contract in the cases where it needs to be matched
+ * against another WSDL contract
+ *
+ * @return WSDL interface contract
+ */
+ InterfaceContract getNormalizedWSDLContract();
+
+ /**
+ * For matching purposes the Java interface contract is
+ * turned into a WSDL contract in the cases where it needs to be matched
+ * against another WSDL contract
+ *
+ * @param wsdlInterfaceContract
+ */
+ void setNormailizedWSDLContract(InterfaceContract wsdlInterfaceContract);
}
Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractImpl.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractImpl.java Tue Jul 13 09:12:08 2010
@@ -125,5 +125,18 @@ public abstract class InterfaceContractI
}
return true;
}
+
+ // By default there is no normailized contract
+ // as only Java needs it
+ public InterfaceContract getNormalizedWSDLContract() {
+ return null;
+ }
+
+ // By default there is no normailized contract
+ // as only Java needs it
+ public void setNormailizedWSDLContract(
+ InterfaceContract wsdlInterfaceContract) {
+ // do nothing
+ }
}
Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java Tue Jul 13 09:12:08 2010
@@ -21,6 +21,11 @@ package org.apache.tuscany.sca.interface
import java.util.List;
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
+import org.apache.tuscany.sca.assembly.builder.ContractBuilder;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.interfacedef.Compatibility;
import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.IncompatibleInterfaceContractException;
@@ -28,27 +33,95 @@ import org.apache.tuscany.sca.interfaced
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
+import org.apache.tuscany.sca.policy.ExtensionType;
/**
* @version $Rev$ $Date$
*/
public class InterfaceContractMapperImpl implements InterfaceContractMapper {
-
+
+ protected ExtensionPointRegistry registry;
+ protected BuilderExtensionPoint builders;
+ protected ContractBuilder contractBuilder;
+
+ public InterfaceContractMapperImpl(ExtensionPointRegistry registry){
+ this.registry = registry;
+ this.builders = registry.getExtensionPoint(BuilderExtensionPoint.class);
+ }
+
public boolean isCompatible(DataType source, DataType target, boolean passByValue) {
+ return isCompatible(source, target, passByValue, null);
+ }
+
+ public boolean isCompatible(DataType source, DataType target, boolean passByValue, StringBuffer audit) {
if (source == target) {
return true;
}
if (!passByValue) {
if (source == null || target == null) {
+ if (audit != null){
+ audit.append("One of either the source or target data types is null for");
+ }
return false;
}
// For local case
return target.getPhysical().isAssignableFrom(source.getPhysical());
} else {
- // FIXME: [rfeng] How to test if two remotable data type is compatible?
- // We will need to understand the different typing system used by the databindings
- // We should probably delegate to some extensions here
- return true;
+ // For remote interfaces where the target is represented with WSDL
+ // the source will have been converted to WSDL so we rely on JAXB mappings
+ // being the same in both cases and just compare the type names directly.
+ // TODO - is this right?
+ XMLType sourceLogicalType = null;
+
+ // There is some nesting of data types (when GeneratedDataType is used) so
+ // dig a bit deeper to find the real data type
+ if (source.getLogical() instanceof DataType<?>){
+ sourceLogicalType = (XMLType)((DataType<?>)source.getLogical()).getLogical();
+ } else {
+ sourceLogicalType = (XMLType)source.getLogical();
+ }
+
+ XMLType targetLogicalType = null;
+
+ if (target.getLogical() instanceof DataType<?>){
+ targetLogicalType = (XMLType)((DataType<?>)target.getLogical()).getLogical();
+ } else {
+ targetLogicalType = (XMLType)target.getLogical();
+ }
+
+ // The logical type seems to be null in some cases, e.g. when the
+ // argument or return type is something like a Map.
+ // TODO - check when some type give rise to a null logical type
+ if (sourceLogicalType.getTypeName() == null ||
+ targetLogicalType.getTypeName() == null) {
+ return true;
+ }
+
+ boolean match = sourceLogicalType.getTypeName().equals(targetLogicalType.getTypeName());
+
+ if (!match){
+
+ QName anyType = new QName("http://www.w3.org/2001/XMLSchema", "anyType");
+ if (sourceLogicalType.getTypeName().equals(anyType) ||
+ targetLogicalType.getTypeName().equals(anyType)){
+ // special case where a Java interface uses a generic type, e.g.
+ // public OMElement getGreetings(OMElement om)
+ // while the provided WSDL uses a specific type. So we assume
+ // that xsd:anyType matched anything
+ match = true;
+ } else {
+ if (audit != null){
+ audit.append("Operation argument types source = " +
+ sourceLogicalType.getTypeName() +
+ " target = " +
+ targetLogicalType.getTypeName() +
+ " don't match for");
+ }
+ }
+ }
+
+ return match;
}
}
@@ -62,6 +135,9 @@ public class InterfaceContractMapperImpl
* @return
*/
public boolean isMutuallyCompatible(InterfaceContract source, InterfaceContract target) {
+ ExtensionType ext = source.getInterface().getExtensionType();
+ InterfaceContract sourceContract = null;
+
// Are the forward interfaces equal?
if (isMutuallyCompatible(source.getInterface(), target.getInterface())) {
// Is there a Callback interface?
@@ -120,6 +196,10 @@ public class InterfaceContractMapperImpl
}
public boolean isCompatible(Operation source, Operation target, Compatibility compatibilityType, boolean byValue) {
+ return isCompatible(source, target, compatibilityType, true, null);
+ }
+
+ public boolean isCompatible(Operation source, Operation target, Compatibility compatibilityType, boolean byValue, StringBuffer audit) {
if (source == target) {
return true;
}
@@ -130,10 +210,22 @@ public class InterfaceContractMapperImpl
// Check name
if (!source.getName().equals(target.getName())) {
+ if (audit != null){
+ audit.append("operation names are not the same source = " +
+ source.getName() +
+ " target = " +
+ target.getName());
+ }
return false;
}
if (source.getInterface().isRemotable() != target.getInterface().isRemotable()) {
+ if (audit != null){
+ audit.append("Interfaces have different remote settings source = " +
+ source.getName() +
+ " target = " +
+ target.getName());
+ }
return false;
}
@@ -164,21 +256,32 @@ public class InterfaceContractMapperImpl
checkTargetWrapper = false;
}
+/* TODO - Why are we assuming compatibility if one side is wrapped and the other is not?
if (checkSourceWrapper != checkTargetWrapper) {
return true;
}
+*/
- if (!isCompatible(targetOutputType, sourceOutputType, passByValue)) {
+ if (!isCompatible(targetOutputType, sourceOutputType, passByValue, audit)) {
+ if (audit != null){
+ audit.append(" output types");
+ }
return false;
}
if (sourceInputType.size() != targetInputType.size()) {
+ if (audit != null){
+ audit.append("different number of input types");
+ }
return false;
}
int size = sourceInputType.size();
for (int i = 0; i < size; i++) {
- if (!isCompatible(sourceInputType.get(i), targetInputType.get(i), passByValue)) {
+ if (!isCompatible(sourceInputType.get(i), targetInputType.get(i), passByValue, audit)) {
+ if (audit != null){
+ audit.append(" input types");
+ }
return false;
}
}
@@ -190,13 +293,16 @@ public class InterfaceContractMapperImpl
boolean found = true;
for (DataType sourceFaultType : source.getFaultTypes()) {
found = false;
- if (isCompatible(targetFaultType, sourceFaultType, passByValue)) {
+ if (isCompatible(targetFaultType, sourceFaultType, passByValue, audit)) {
// Target fault type can be covered by the source fault type
found = true;
break;
}
}
if (!found) {
+ if (audit != null){
+ audit.append("Fault types incompatible");
+ }
return false;
}
}
@@ -226,6 +332,7 @@ public class InterfaceContractMapperImpl
Compatibility compatibility,
boolean ignoreCallback,
boolean silent) throws IncompatibleInterfaceContractException {
+
if (source == target) {
// Shortcut for performance
return true;
@@ -268,18 +375,20 @@ public class InterfaceContractMapperImpl
return false;
}
}
- if (!source.getInterface().isRemotable()) {
- // FIXME: for remotable operation, only compare name for now
+
+ if (!silent) {
+ StringBuffer audit = new StringBuffer();
+ if (!isCompatible(operation, targetOperation, Compatibility.SUBSET, true, audit)){
+ throw new IncompatibleInterfaceContractException("Operations called " +
+ operation.getName() +
+ " are not compatible " +
+ audit,
+ source,
+ target);
+ }
+ } else {
if (!isCompatible(operation, targetOperation, Compatibility.SUBSET)) {
- if (!silent) {
- throw new IncompatibleInterfaceContractException("Target operations called " +
- operation.getName() +
- " are not compatible",
- source,
- target);
- } else {
- return false;
- }
+ return false;
}
}
}
@@ -294,7 +403,7 @@ public class InterfaceContractMapperImpl
}
if (source.getCallbackInterface() == null || target.getCallbackInterface() == null) {
if (!silent) {
- throw new IncompatibleInterfaceContractException("Callback interface doesn't match", source, target);
+ throw new IncompatibleInterfaceContractException("Callback interface doesn't match as one of the callback interfaces is null", source, target);
} else {
return false;
}
@@ -386,7 +495,30 @@ public class InterfaceContractMapperImpl
}
return null;
}
-
}
+
+ /**
+ * In various places in the process of an SCA application we match one interface against
+ * another. Sometimes the two interfaces can be presented using different IDLs, for example
+ * Java and WSDL. In this case interfaces are converted so that they are both WSDL1.1 interfaces
+ * and they are then compared. The generated WSDL is cached on the interface object for
+ * any subsequent matching
+ *
+ * @param interfaceA
+ * @param interfaceB
+ */
+/*
+ public void normalizeContractsForComparison(InterfaceContract interfaceA, InterfaceContract interfaceB){
+ // normalize interfaces
+ if (interfaceA.getInterface().getClass() != interfaceB.getInterface().getClass()) {
+ this.contractBuilder = builders.getContractBuilder();
+ if (interfaceA.getInterface() instanceof Interface){
+ contractBuilder.build(interfaceA, null);
+ } else {
+ contractBuilder.build(interfaceB, null);
+ }
+ }
+ }
+*/
}
Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties Tue Jul 13 09:12:08 2010
@@ -79,3 +79,5 @@ CompositeReferencePromotesNonOverridable
PropertyValueDoesNotMatchSimpleType = [ASM50027] The property {0} on component {1} has a value which does not match the simple type {2} with which it is associated
PropertyValueDoesNotMatchComplexType = [ASM50038] The property {0} on component {1} has a value which does not match the complex type {2} with which it is associated. Validation reported {3}
PropertyValueDoesNotMatchElement = [ASM50029] The property {0} on component {1} has a value which does not match the element {2} with which it is associated. Validation reported {3}
+EPRIncompatibleInterface = [BWS20007] The reference interface is incompatible with the interface of the reference binding {0}
+EPIncompatibleInterface = [BWS20007] The service interface is incompatible with the interface of the service binding {0}
Modified: tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterfaceContract.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterfaceContract.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterfaceContract.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterfaceContract.java Tue Jul 13 09:12:08 2010
@@ -54,5 +54,18 @@ public class TestInterfaceContract imple
public Object clone() {
return null;
}
+
+ // By default there is no normailized contract
+ // as only Java needs it
+ public InterfaceContract getNormalizedWSDLContract() {
+ return null;
+ }
+
+ // By default there is no normailized contract
+ // as only Java needs it
+ public void setNormailizedWSDLContract(
+ InterfaceContract wsdlInterfaceContract) {
+ // do nothing
+ }
}
Modified: tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestRuntimeWire.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestRuntimeWire.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestRuntimeWire.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestRuntimeWire.java Tue Jul 13 09:12:08 2010
@@ -288,5 +288,18 @@ public class TestRuntimeWire implements
// TODO Auto-generated method stub
}
+
+ public void setGeneratedWSDLContract(InterfaceContract wsdlContract){
+
+ }
+
+ public InterfaceContract getGeneratedWSDLContract(){
+ return null;
+ }
+
+ public void validateServiceInterfaceCompatibility() {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGenerator.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGenerator.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGenerator.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGenerator.java Tue Jul 13 09:12:08 2010
@@ -266,27 +266,64 @@ public class BindingWSDLGenerator {
/**
* Create a WSDLInterfaceContract from a JavaInterfaceContract
*/
- protected static WSDLInterfaceContract createWSDLInterfaceContract(JavaInterfaceContract contract,
- boolean requiresSOAP12,
- ModelResolver resolver,
- DataBindingExtensionPoint dataBindings,
- WSDLFactory wsdlFactory,
- XSDFactory xsdFactory,
- DocumentBuilderFactory documentBuilderFactory,
- Monitor monitor) {
+ public static WSDLInterfaceContract createWSDLInterfaceContract(JavaInterfaceContract contract,
+ boolean requiresSOAP12,
+ ModelResolver resolver,
+ DataBindingExtensionPoint dataBindings,
+ WSDLFactory wsdlFactory,
+ XSDFactory xsdFactory,
+ DocumentBuilderFactory documentBuilderFactory,
+ Monitor monitor) {
WSDLInterfaceContract wsdlContract = wsdlFactory.createWSDLInterfaceContract();
- WSDLInterface wsdlInterface = wsdlFactory.createWSDLInterface();
- wsdlContract.setInterface(wsdlInterface);
+
+ if (contract.getInterface() != null){
+ WSDLInterface wsdlInterface = createWSDLInterface((JavaInterface)contract.getInterface(),
+ requiresSOAP12,
+ resolver,
+ dataBindings,
+ wsdlFactory,
+ xsdFactory,
+ documentBuilderFactory,
+ monitor);
+ wsdlContract.setInterface(wsdlInterface);
+ }
+
+ if (contract.getCallbackInterface() != null){
+ WSDLInterface wsdlInterface = createWSDLInterface((JavaInterface)contract.getCallbackInterface(),
+ requiresSOAP12,
+ resolver,
+ dataBindings,
+ wsdlFactory,
+ xsdFactory,
+ documentBuilderFactory,
+ monitor);
+ wsdlContract.setCallbackInterface(wsdlInterface);
+ }
+ return wsdlContract;
+ }
+
+ /**
+ * Create a WSDLInterface from a JavaInterface
+ */
+ public static WSDLInterface createWSDLInterface(JavaInterface javaInterface,
+ boolean requiresSOAP12,
+ ModelResolver resolver,
+ DataBindingExtensionPoint dataBindings,
+ WSDLFactory wsdlFactory,
+ XSDFactory xsdFactory,
+ DocumentBuilderFactory documentBuilderFactory,
+ Monitor monitor) {
+
+ WSDLInterface wsdlInterface = wsdlFactory.createWSDLInterface();
WSDLDefinition wsdlDefinition = wsdlFactory.createWSDLDefinition();
- JavaInterface iface = (JavaInterface)contract.getInterface();
Definition def = null;
try {
Interface2WSDLGenerator wsdlGenerator =
new Interface2WSDLGenerator(requiresSOAP12, resolver, dataBindings, xsdFactory, documentBuilderFactory, monitor);
- def = wsdlGenerator.generate(iface, wsdlDefinition);
+ def = wsdlGenerator.generate(javaInterface, wsdlDefinition);
} catch (WSDLException e) {
throw new WSDLGenerationException(e);
}
@@ -294,7 +331,7 @@ public class BindingWSDLGenerator {
// for debugging
if (printWSDL) {
try {
- System.out.println("Generated WSDL for Java interface " + iface.getName() + " class " + iface.getJavaClass().getName());
+ System.out.println("Generated WSDL for Java interface " + javaInterface.getName() + " class " + javaInterface.getJavaClass().getName());
WSDLWriter writer = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
writer.writeWSDL(def, System.out);
} catch (WSDLException e) {
@@ -316,7 +353,7 @@ public class BindingWSDLGenerator {
throw new WSDLGenerationException(e);
}
- return wsdlContract;
- }
+ return wsdlInterface;
+ }
}
Modified: tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java Tue Jul 13 09:12:08 2010
@@ -797,10 +797,20 @@ public class Interface2WSDLGenerator {
}
helpers.put(db, helper);
}
- TypeInfo typeInfo = helper.getTypeInfo(javaType.isArray() ? javaType.getComponentType() : javaType,
- dataType.getLogical());
- ElementInfo element = new ElementInfo(name, typeInfo);
- element.setMany(byte[].class != javaType && javaType.isArray());
+ // TUSCANY-3616 - don't revert a byte[] to a byte type but retain the mapping to base64Binary
+ // which is carried in the dataType and the original javaType
+ TypeInfo typeInfo = null;
+ ElementInfo element = null;
+ if (byte[].class == javaType){
+ typeInfo = helper.getTypeInfo(javaType, dataType.getLogical());
+ element = new ElementInfo(name, typeInfo);
+ element.setMany(false);
+ } else {
+ typeInfo = helper.getTypeInfo(javaType.isArray() ? javaType.getComponentType() : javaType, dataType.getLogical());
+ element = new ElementInfo(name, typeInfo);
+ element.setMany(javaType.isArray());
+ }
+
element.setNillable(!javaType.isPrimitive());
return element;
}
Added: tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WSDLContractBuilder.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WSDLContractBuilder.java?rev=963624&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WSDLContractBuilder.java (added)
+++ tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WSDLContractBuilder.java Tue Jul 13 09:12:08 2010
@@ -0,0 +1,90 @@
+/*
+ * 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.tuscany.sca.binding.ws.wsdlgen;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.builder.BindingBuilder;
+import org.apache.tuscany.sca.assembly.builder.BuilderContext;
+import org.apache.tuscany.sca.assembly.builder.ContractBuilder;
+import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResolverExtension;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+
+/**
+ * Created WSDL contracts for Endpoints or EndpointReferences for use during
+ * interface contract mapping. The assmebly spec defines WSDL as the lowest
+ * common denominator for contract mapping.
+ */
+public class WSDLContractBuilder implements ContractBuilder {
+
+ private ExtensionPointRegistry extensionPoints;
+ private FactoryExtensionPoint modelFactories;
+ private DataBindingExtensionPoint dataBindings;
+ private WSDLFactory wsdlFactory;
+ private XSDFactory xsdFactory;
+ private DocumentBuilderFactory documentBuilderFactory;
+
+ public WSDLContractBuilder(ExtensionPointRegistry extensionPoints) {
+ this.extensionPoints = extensionPoints;
+
+ modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
+ dataBindings = extensionPoints.getExtensionPoint(DataBindingExtensionPoint.class);
+ wsdlFactory = modelFactories.getFactory(WSDLFactory.class);
+ xsdFactory = modelFactories.getFactory(XSDFactory.class);
+ documentBuilderFactory = modelFactories.getFactory(DocumentBuilderFactory.class);
+
+ }
+
+ public boolean build(InterfaceContract interfaceContract, BuilderContext context){
+// Uncomment the printWSDL = lines to see the WSDL that is generated
+// for interface matching purposes
+// BindingWSDLGenerator.printWSDL = true;
+ JavaInterfaceContract javaContract = (JavaInterfaceContract)interfaceContract;
+ WSDLInterfaceContract wsdlContract =
+ BindingWSDLGenerator.createWSDLInterfaceContract(javaContract,
+ false,
+ null,
+ dataBindings,
+ wsdlFactory,
+ xsdFactory,
+ documentBuilderFactory,
+ null);
+ javaContract.setNormailizedWSDLContract(wsdlContract);
+// BindingWSDLGenerator.printWSDL = false;
+ return true;
+ }
+
+}
Added: tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ContractBuilder
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ContractBuilder?rev=963624&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ContractBuilder (added)
+++ tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ContractBuilder Tue Jul 13 09:12:08 2010
@@ -0,0 +1,18 @@
+# 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.
+org.apache.tuscany.sca.binding.ws.wsdlgen.WSDLContractBuilder
+
Modified: tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java Tue Jul 13 09:12:08 2010
@@ -73,10 +73,10 @@ class WebServiceBindingImpl implements W
private String portName;
private QName serviceName;
private String endpointName;
- private WSDLDefinition wsdlDefinition;
- private String wsdlNamespace;
private InterfaceContract bindingInterfaceContract;
private Element endPointReference;
+ private String wsdlNamespace;
+ private WSDLDefinition userSpecifiedWSDLDefinition;
private Definition generatedWSDLDocument;
private boolean isDocumentStyle;
private boolean isLiteralEncoding;
@@ -140,8 +140,8 @@ class WebServiceBindingImpl implements W
public Binding getBinding() {
if (binding == null) {
- if (getUserSpecifiedWSDLDefinition() != null && wsdlDefinition.getBinding() != null) {
- binding = wsdlDefinition.getBinding();
+ if (getUserSpecifiedWSDLDefinition() != null && userSpecifiedWSDLDefinition.getBinding() != null) {
+ binding = userSpecifiedWSDLDefinition.getBinding();
determineWSDLCharacteristics();
}
}
@@ -247,17 +247,17 @@ class WebServiceBindingImpl implements W
}
public WSDLDefinition getUserSpecifiedWSDLDefinition() {
- if (wsdlDefinition == null) {
+ if (userSpecifiedWSDLDefinition == null) {
Interface iface = bindingInterfaceContract.getInterface();
if (iface instanceof WSDLInterface) {
- wsdlDefinition = ((WSDLInterface) iface).getWsdlDefinition();
+ userSpecifiedWSDLDefinition = ((WSDLInterface) iface).getWsdlDefinition();
}
}
- return wsdlDefinition;
+ return userSpecifiedWSDLDefinition;
}
public void setUserSpecifiedWSDLDefinition(WSDLDefinition wsdlDefinition) {
- this.wsdlDefinition = wsdlDefinition;
+ this.userSpecifiedWSDLDefinition = wsdlDefinition;
}
public String getNamespace() {
@@ -335,7 +335,7 @@ class WebServiceBindingImpl implements W
}
/**
- * Some items get calculated and cached as they are used are runtime
+ * Some items get calculated and cached as they are used at runtime
* to decide what message processing is required
*/
protected void determineWSDLCharacteristics() {
@@ -347,8 +347,8 @@ class WebServiceBindingImpl implements W
protected void setIsDocumentStyle() {
if (binding == null){
- if (wsdlDefinition != null && wsdlDefinition.getDefinition() != null){
- Message firstMessage = (Message)wsdlDefinition.getDefinition().getMessages().values().iterator().next();
+ if (userSpecifiedWSDLDefinition != null && userSpecifiedWSDLDefinition.getDefinition() != null){
+ Message firstMessage = (Message)userSpecifiedWSDLDefinition.getDefinition().getMessages().values().iterator().next();
Part firstPart = (Part)firstMessage.getParts().values().iterator().next();
if (firstPart.getTypeName() != null){
isDocumentStyle = false;
Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java?rev=963624&r1=963623&r2=963624&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java Tue Jul 13 09:12:08 2010
@@ -61,6 +61,7 @@ import org.apache.tuscany.sca.assembly.S
import org.apache.tuscany.sca.assembly.Service;
import org.apache.tuscany.sca.assembly.builder.BuilderContext;
import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
+import org.apache.tuscany.sca.assembly.builder.ContractBuilder;
import org.apache.tuscany.sca.assembly.builder.ImplementationBuilder;
import org.apache.tuscany.sca.assembly.builder.Messages;
import org.apache.tuscany.sca.assembly.xsd.Constants;
@@ -75,9 +76,12 @@ import org.apache.tuscany.sca.definition
import org.apache.tuscany.sca.interfacedef.Compatibility;
import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.IncompatibleInterfaceContractException;
+import org.apache.tuscany.sca.interfacedef.Interface;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
import org.apache.tuscany.sca.monitor.Monitor;
import org.apache.tuscany.sca.policy.ExtensionType;
@@ -106,6 +110,7 @@ public class ComponentBuilderImpl {
private InterfaceContractMapper interfaceContractMapper;
private BuilderExtensionPoint builders;
private Mediator mediator;
+ private ContractBuilder contractBuilder;
public ComponentBuilderImpl(ExtensionPointRegistry registry) {
UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
@@ -120,6 +125,7 @@ public class ComponentBuilderImpl {
policyBuilder = new ComponentPolicyBuilderImpl(registry);
builders = registry.getExtensionPoint(BuilderExtensionPoint.class);
mediator = new MediatorImpl(registry);
+ contractBuilder = builders.getContractBuilder();
}
public void setComponentTypeBuilder(CompositeComponentTypeBuilderImpl componentTypeBuilder) {
@@ -1297,7 +1303,8 @@ public class ComponentBuilderImpl {
boolean isCompatible = true;
String incompatibilityReason = "";
try{
- isCompatible = interfaceContractMapper.checkCompatibility(topInterfaceContract, bottomInterfaceContract, Compatibility.SUBSET, false, false);
+ isCompatible = checkSubsetCompatibility(topInterfaceContract,
+ bottomInterfaceContract);
} catch (IncompatibleInterfaceContractException ex){
isCompatible = false;
incompatibilityReason = ex.getMessage();
@@ -1311,6 +1318,24 @@ public class ComponentBuilderImpl {
topContract.getName(),
incompatibilityReason);
}
+
+ // TODO - there is an issue with the following code if the
+ // contracts of of different types. Need to use the
+ // normalized form
+
+ // fix up the forward interface based on the promoted component
+ // Someone might have manually specified a callback interface but
+ // left out the forward interface
+ if (topInterfaceContract.getInterface() == null){
+ topInterfaceContract.setInterface(bottomInterfaceContract.getInterface());
+ }
+
+ // fix up the callback interface based on the promoted component
+ // Someone might have manually specified a forward interface but
+ // left out the callback interface
+ if (topInterfaceContract.getCallbackInterface() == null){
+ topInterfaceContract.setCallbackInterface(bottomInterfaceContract.getCallbackInterface());
+ }
}
}
@@ -1337,7 +1362,8 @@ public class ComponentBuilderImpl {
boolean isCompatible = true;
String incompatibilityReason = "";
try{
- isCompatible = interfaceContractMapper.checkCompatibility(bottomInterfaceContract, topInterfaceContract, Compatibility.SUBSET, false, false);
+ isCompatible = checkSubsetCompatibility(bottomInterfaceContract,
+ topInterfaceContract);
} catch (IncompatibleInterfaceContractException ex){
isCompatible = false;
incompatibilityReason = ex.getMessage();
@@ -1351,6 +1377,24 @@ public class ComponentBuilderImpl {
topContract.getName(),
incompatibilityReason);
}
+
+ // TODO - there is an issue with the following code if the
+ // contracts of of different types. Need to use the
+ // normalized form
+
+ // fix up the forward interface based on the promoted component
+ // Someone might have manually specified a callback interface but
+ // left out the forward interface
+ if (topInterfaceContract.getInterface() == null){
+ topInterfaceContract.setInterface(bottomInterfaceContract.getInterface());
+ }
+
+ // fix up the callback interface based on the promoted component
+ // Someone might have manually specified a forward interface but
+ // left out the callback interface
+ if (topInterfaceContract.getCallbackInterface() == null){
+ topInterfaceContract.setCallbackInterface(bottomInterfaceContract.getCallbackInterface());
+ }
}
}
@@ -1418,6 +1462,43 @@ public class ComponentBuilderImpl {
} else if (componentReference.getCallback().getBindings().isEmpty() && componentTypeReference.getCallback() != null) {
componentReference.getCallback().getBindings().addAll(componentTypeReference.getCallback().getBindings());
}
- }
+ }
+
+ /**
+ * A local wrapper for the interace contract mapper as we need to normalize the
+ * interface contracts if appropriate and the mapper doesn't have the right
+ * dependencies to be able to do it.
+ *
+ * Sometimes the two interfaces can be presented using different IDLs, for example
+ * Java and WSDL. In this case interfaces are converted so that they are both WSDL1.1 interfaces
+ * and they are then compared. The generated WSDL is cached on the interface object for
+ * any subsequent matching
+ *
+ * @param contractA
+ * @param contractB
+ * @return true if the interface contracts match
+ */
+ private boolean checkSubsetCompatibility(InterfaceContract contractA, InterfaceContract contractB)
+ throws IncompatibleInterfaceContractException {
+
+ if (contractA.getClass() != contractB.getClass()) {
+
+ if (contractA instanceof JavaInterfaceContract){
+ contractBuilder.build(contractA, null);
+ contractA = ((JavaInterfaceContract)contractA).getNormalizedWSDLContract();
+ }
+
+ if (contractB instanceof JavaInterfaceContract){
+ contractBuilder.build(contractB, null);
+ contractB = ((JavaInterfaceContract)contractB).getNormalizedWSDLContract();
+ }
+ }
+
+ return interfaceContractMapper.checkCompatibility(contractA,
+ contractB,
+ Compatibility.SUBSET,
+ false,
+ false);
+ }
}