From d7e5b6bef7f0ea0f062a0b715fdf4281ca65bcd5 Mon Sep 17 00:00:00 2001 From: nash Date: Sun, 4 Dec 2011 18:10:28 +0000 Subject: TUSCANY-3984: Support binding.ws, interface.wsdl and policySets for serialized service references git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1210165 13f79535-47bb-0310-9956-ffa450edef68 --- .../trunk/itest/serialization-ws-basicauth/pom.xml | 65 +++++++ .../src/main/java/helloworld/HelloWorldImpl.java | 33 ++++ .../main/java/helloworld/HelloWorldService.java | 29 +++ .../helloworld/HelloWorldServiceComponent.java | 80 ++++++++ .../src/main/resources/definitions.xml | 25 +++ .../src/main/resources/helloworldws.composite | 35 ++++ .../main/resources/helloworldwsclient.composite | 37 ++++ .../src/main/resources/wsdl/helloworld.wsdl | 85 +++++++++ .../java/helloworld/HelloWorldClientTestCase.java | 66 +++++++ .../test/java/helloworld/HelloWorldTestServer.java | 55 ++++++ sca-java-1.x/trunk/itest/serialization-ws/pom.xml | 87 +++++++++ .../main/java/helloworld/ClientPWCBHandler.java | 45 +++++ .../src/main/java/helloworld/HelloWorldImpl.java | 33 ++++ .../main/java/helloworld/HelloWorldService.java | 29 +++ .../helloworld/HelloWorldServiceComponent.java | 78 ++++++++ .../main/java/helloworld/ServerPWCBHandler.java | 55 ++++++ ...rg.apache.tuscany.sca.policy.util.PolicyHandler | 21 +++ .../src/main/resources/definitions.xml | 203 +++++++++++++++++++++ .../src/main/resources/helloworldKeys.jks | Bin 0 -> 1354 bytes .../src/main/resources/helloworldws.composite | 42 +++++ .../main/resources/helloworldwsclient.composite | 59 ++++++ .../src/main/resources/wsdl/helloworld.wsdl | 85 +++++++++ .../java/helloworld/HelloWorldClientTestCase.java | 82 +++++++++ .../test/java/helloworld/HelloWorldTestServer.java | 55 ++++++ .../tuscany/sca/runtime/BusinessInterface.java | 39 ++++ .../sca/core/assembly/BusinessInterfaceImpl.java | 74 ++++++++ .../core/assembly/BusinessInterfaceProcessor.java | 97 ++++++++++ .../sca/core/context/CallableReferenceImpl.java | 77 +++++++- .../sca/core/context/ComponentContextHelper.java | 29 +++ ...ca.contribution.processor.StAXArtifactProcessor | 1 + 30 files changed, 1696 insertions(+), 5 deletions(-) create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/pom.xml create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldImpl.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldService.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldServiceComponent.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/definitions.xml create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/helloworldws.composite create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/helloworldwsclient.composite create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/wsdl/helloworld.wsdl create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/test/java/helloworld/HelloWorldClientTestCase.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/test/java/helloworld/HelloWorldTestServer.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/pom.xml create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/ClientPWCBHandler.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldImpl.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldService.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldServiceComponent.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/ServerPWCBHandler.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/META-INF/services/org.apache.tuscany.sca.policy.util.PolicyHandler create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/definitions.xml create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldKeys.jks create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldws.composite create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldwsclient.composite create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/wsdl/helloworld.wsdl create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/test/java/helloworld/HelloWorldClientTestCase.java create mode 100644 sca-java-1.x/trunk/itest/serialization-ws/src/test/java/helloworld/HelloWorldTestServer.java create mode 100644 sca-java-1.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/BusinessInterface.java create mode 100644 sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/BusinessInterfaceImpl.java create mode 100644 sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/BusinessInterfaceProcessor.java (limited to 'sca-java-1.x') diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/pom.xml b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/pom.xml new file mode 100644 index 0000000000..4b1302e1ab --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/pom.xml @@ -0,0 +1,65 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 1.7-SNAPSHOT + ../pom.xml + + itest-serialization-ws-basicauth + Apache Tuscany SCA iTest Serialized Service Reference Using HTTP Basic Auth + + + + org.apache.tuscany.sca + tuscany-host-embedded + 1.7-SNAPSHOT + + + + org.apache.ws.security + wss4j + 1.5.3 + + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 1.7-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-host-tomcat + 1.7-SNAPSHOT + test + + + + org.apache.tuscany.sca + tuscany-binding-ws-axis2 + 1.7-SNAPSHOT + test + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldImpl.java b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldImpl.java new file mode 100644 index 0000000000..4cdcc1fd0b --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldImpl.java @@ -0,0 +1,33 @@ +/* + * 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 helloworld; + +import org.osoa.sca.annotations.Service; + +/** + * This class implements the HelloWorld service. + */ +@Service(HelloWorldService.class) +public class HelloWorldImpl implements HelloWorldService { + + public String getGreetings(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldService.java b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldService.java new file mode 100644 index 0000000000..c0259c6e07 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldService.java @@ -0,0 +1,29 @@ +/* + * 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 helloworld; + +import org.osoa.sca.annotations.Remotable; + +/** + * The interface for the helloworld service + */ +@Remotable +public interface HelloWorldService { + public String getGreetings(String name); +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldServiceComponent.java b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldServiceComponent.java new file mode 100644 index 0000000000..4d35fbac77 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/java/helloworld/HelloWorldServiceComponent.java @@ -0,0 +1,80 @@ +/* + * 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 helloworld; + +import java.io.IOException; +import java.io.StringReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; +import org.apache.tuscany.sca.core.context.ServiceReferenceImpl; +import org.osoa.sca.ServiceReference; +import org.osoa.sca.annotations.Reference; + +/** + * The HelloWorld service implementation + */ +public class HelloWorldServiceComponent implements HelloWorldService { + + ServiceReference helloWorldService; + + public String getGreetings(String name) { + System.out.println("Called getGreetings"); + //return helloWorldService.getService().getGreetings(name); + String xml = null; + try { + xml = serializeServiceReferenceXML(helloWorldService); + } catch (IOException e) { + e.printStackTrace(); + return "serialization failure"; + } + System.out.println(xml); + ServiceReference srCopy = null; + try { + srCopy = deserializeServiceReferenceXML(xml); + } catch (Exception e) { + e.printStackTrace(); + return "deserialization failure"; + } + return srCopy.getService().getGreetings(name); + } + + private String serializeServiceReferenceXML(ServiceReference sr) throws IOException { + ServiceReferenceImpl sri = (ServiceReferenceImpl) sr; + return sri.toXMLString(); + } + + private ServiceReference deserializeServiceReferenceXML(String serializedSR) throws Exception { + StringReader reader = new StringReader(serializedSR); + XMLStreamReader xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(reader); + ServiceReferenceImpl sri + = new ServiceReferenceImpl(/*HelloWorldService.class, */xmlReader); + return sri; + } + + public ServiceReference getHelloWorldService() { + System.out.println("Got Injected helloWorldService"); + return helloWorldService; + } + + @Reference + public void setHelloWorldService(ServiceReference helloWorldService) { + System.out.println("Injected helloWorldService"); + this.helloWorldService = helloWorldService; + } +} \ No newline at end of file diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/definitions.xml b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/definitions.xml new file mode 100644 index 0000000000..463229c3a8 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/definitions.xml @@ -0,0 +1,25 @@ + + + + + + TuscanyWsUser + TuscanyWsUserPasswd + + + + + + TuscanyWsUser + TuscanyWsUserPasswd + + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/helloworldws.composite b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/helloworldws.composite new file mode 100644 index 0000000000..949d7d4292 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/helloworldws.composite @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/helloworldwsclient.composite b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/helloworldwsclient.composite new file mode 100644 index 0000000000..9bfcf80c6c --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/helloworldwsclient.composite @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/wsdl/helloworld.wsdl b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/wsdl/helloworld.wsdl new file mode 100644 index 0000000000..e6fcc6f4a6 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/main/resources/wsdl/helloworld.wsdl @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/test/java/helloworld/HelloWorldClientTestCase.java b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/test/java/helloworld/HelloWorldClientTestCase.java new file mode 100644 index 0000000000..6b9ede4efd --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/test/java/helloworld/HelloWorldClientTestCase.java @@ -0,0 +1,66 @@ +/* + * 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 helloworld; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.host.embedded.SCADomain; +import org.apache.tuscany.sca.host.embedded.SCATestCaseRunner; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Test case for helloworld web service client + */ +public class HelloWorldClientTestCase { + + private HelloWorldService helloTuscanyService; + private SCADomain scaDomain; + + private SCATestCaseRunner server; + + @Before + public void startClient() throws Exception { + try { + scaDomain = SCADomain.newInstance("helloworldwsclient.composite"); + helloTuscanyService = scaDomain.getService(HelloWorldService.class, "HelloTuscanyServiceComponent"); + + server = new SCATestCaseRunner(HelloWorldTestServer.class); + server.before(); + + } catch (Throwable e) { + e.printStackTrace(); + } + } + + @Test + public void testEmbeddedReferenceClient() throws Exception { + String msg = helloTuscanyService.getGreetings("Tuscany"); + Assert.assertEquals("Hello Tuscany", msg); + } + + @After + public void stopClient() throws Exception { + server.after(); + scaDomain.close(); + } + +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/test/java/helloworld/HelloWorldTestServer.java b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/test/java/helloworld/HelloWorldTestServer.java new file mode 100644 index 0000000000..21f2166560 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws-basicauth/src/test/java/helloworld/HelloWorldTestServer.java @@ -0,0 +1,55 @@ +/* + * 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 helloworld; + +import java.io.IOException; +import java.net.Socket; + +import org.apache.tuscany.sca.host.embedded.SCADomain; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Starts up the SCA runtime which starts listening for service requests + */ +public class HelloWorldTestServer { + + private SCADomain scaDomain; + + @Before + public void startServer() throws Exception { + try { + scaDomain = SCADomain.newInstance("helloworldws.composite"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void testPing() throws IOException { + new Socket("127.0.0.1", 8085); + } + + @After + public void stopServer() throws Exception { + scaDomain.close(); + } + +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws/pom.xml b/sca-java-1.x/trunk/itest/serialization-ws/pom.xml new file mode 100644 index 0000000000..b41e314e03 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/pom.xml @@ -0,0 +1,87 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 1.7-SNAPSHOT + ../pom.xml + + itest-serialization-ws + Apache Tuscany SCA iTest Serialized Service Reference Using Web Services + + + + org.apache.tuscany.sca + tuscany-host-embedded + 1.7-SNAPSHOT + + + + org.apache.ws.security + wss4j + 1.5.4 + + + org.apache.santuario + xmlsec + + + bouncycastle + bcprov-jdk13 + + + bouncycastle + bcprov-jdk15 + + + opensaml + opensaml + + + junit + junit + + + + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 1.7-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-host-tomcat + 1.7-SNAPSHOT + test + + + + org.apache.tuscany.sca + tuscany-binding-ws-axis2 + 1.7-SNAPSHOT + test + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/ClientPWCBHandler.java b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/ClientPWCBHandler.java new file mode 100644 index 0000000000..0f1ebf46d6 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/ClientPWCBHandler.java @@ -0,0 +1,45 @@ +/* + * 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 helloworld; + +import java.io.IOException; + +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.UnsupportedCallbackException; + +import org.apache.ws.security.WSPasswordCallback; + +/** + * Sample userid passwd generation class + */ +public class ClientPWCBHandler implements CallbackHandler { + + public void handle(Callback[] callbacks) throws IOException, + UnsupportedCallbackException { + for (int i = 0; i < callbacks.length; i++) { + System.out.println("*** Calling Client UserId/Password Handler .... "); + WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i]; + System.out.println("User Id = " + pwcb.getIdentifer()); + pwcb.setPassword("TuscanyWsUserPasswd"); + System.out.println("Set Password = " + pwcb.getPassword()); + } + } + +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldImpl.java b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldImpl.java new file mode 100644 index 0000000000..4cdcc1fd0b --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldImpl.java @@ -0,0 +1,33 @@ +/* + * 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 helloworld; + +import org.osoa.sca.annotations.Service; + +/** + * This class implements the HelloWorld service. + */ +@Service(HelloWorldService.class) +public class HelloWorldImpl implements HelloWorldService { + + public String getGreetings(String name) { + return "Hello " + name; + } + +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldService.java b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldService.java new file mode 100644 index 0000000000..c0259c6e07 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldService.java @@ -0,0 +1,29 @@ +/* + * 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 helloworld; + +import org.osoa.sca.annotations.Remotable; + +/** + * The interface for the helloworld service + */ +@Remotable +public interface HelloWorldService { + public String getGreetings(String name); +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldServiceComponent.java b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldServiceComponent.java new file mode 100644 index 0000000000..3a8edf372f --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/HelloWorldServiceComponent.java @@ -0,0 +1,78 @@ +/* + * 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 helloworld; + +import java.io.IOException; +import java.io.StringReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; +import org.apache.tuscany.sca.core.context.ServiceReferenceImpl; +import org.osoa.sca.ServiceReference; +import org.osoa.sca.annotations.Reference; + +/** + * The HelloWorld service implementation + */ +public class HelloWorldServiceComponent implements HelloWorldService { + + ServiceReference helloWorldService; + + public String getGreetings(String name) { + System.out.println("Called getGreetings"); + String xml = null; + try { + xml = serializeServiceReferenceXML(helloWorldService); + } catch (IOException e) { + e.printStackTrace(); + return "serialization failure"; + } + System.out.println(xml); + ServiceReference srCopy = null; + try { + srCopy = deserializeServiceReferenceXML(xml); + } catch (Exception e) { + e.printStackTrace(); + return "deserialization failure"; + } + return srCopy.getService().getGreetings(name); + } + + public ServiceReference getHelloWorldService() { + System.out.println("Got Injected helloWorldService"); + return helloWorldService; + } + + @Reference + public void setHelloWorldService(ServiceReference helloWorldService) { + System.out.println("Injected helloWorldService"); + this.helloWorldService = helloWorldService; + } + + private String serializeServiceReferenceXML(ServiceReference sr) throws IOException { + ServiceReferenceImpl sri = (ServiceReferenceImpl) sr; + return sri.toXMLString(); + } + + private ServiceReference deserializeServiceReferenceXML(String serializedSR) throws Exception { + StringReader reader = new StringReader(serializedSR); + XMLStreamReader xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(reader); + ServiceReferenceImpl sri = new ServiceReferenceImpl(xmlReader); + return sri; + } +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/ServerPWCBHandler.java b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/ServerPWCBHandler.java new file mode 100644 index 0000000000..ded02f09d6 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/java/helloworld/ServerPWCBHandler.java @@ -0,0 +1,55 @@ +/* + * 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 helloworld; + +import java.io.IOException; + +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.UnsupportedCallbackException; + +import org.apache.ws.security.WSPasswordCallback; + +/** + * Sample userid passwd generation class + */ +public class ServerPWCBHandler implements CallbackHandler { + + public void handle(Callback[] callbacks) throws IOException, + UnsupportedCallbackException { + for (int i = 0; i < callbacks.length; i++) { + System.out.println("*** Calling Server User/Passwd Handler...."); + WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i]; + System.out.println("User Id = " + pwcb.getIdentifer()); + System.out.println("Password = " + pwcb.getPassword()); + + if ( pwcb.getUsage() == WSPasswordCallback.USERNAME_TOKEN ) { + if ( pwcb.getIdentifer().equals("TuscanyWsUser") && + pwcb.getPassword().equals("TuscanyWsUserPasswd") ){ + return; + } else { + throw new UnsupportedCallbackException(pwcb, "Authentication Failed : UserId - Password mismatch"); + } + } else if ( pwcb.getUsage() == WSPasswordCallback.SIGNATURE ) { + pwcb.setPassword("TuscanyWsUserPasswd"); + } + } + } + +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/META-INF/services/org.apache.tuscany.sca.policy.util.PolicyHandler b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/META-INF/services/org.apache.tuscany.sca.policy.util.PolicyHandler new file mode 100644 index 0000000000..8b089c7222 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/META-INF/services/org.apache.tuscany.sca.policy.util.PolicyHandler @@ -0,0 +1,21 @@ +# 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. +# +# PolicyHandlerClasses to interpret specific PolicyModels against specific QoS infrastructures +# handler classname;qname=;model= +org.apache.tuscany.sca.policy.security.ws.Axis2ConfigParamPolicyHandler;intent=http://helloworld#wsAuthentication,model=org.apache.tuscany.sca.policy.security.ws.Axis2ConfigParamPolicy +org.apache.tuscany.sca.policy.security.ws.WSSecurityPolicyHandler;intent=http://helloworld#wsIntegrity,model=org.apache.neethi.Policy \ No newline at end of file diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/definitions.xml b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/definitions.xml new file mode 100644 index 0000000000..db1e2b291d --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/definitions.xml @@ -0,0 +1,203 @@ + + + + + + + + + + UsernameToken + TuscanyWsUser + helloworld.ClientPWCBHandler" + + PasswordText + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TuscanyWsUser + TuscanyWsUser + helloworld.ClientPWCBHandler + + + + JKS + helloworldKeys.jks + TuscanyWsUserPasswd + + + + + + + + + + + + + + + + + UsernameToken + helloworld.ServerPWCBHandler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TuscanyWsUser + TuscanyWsUser + helloworld.ServerPWCBHandler + + + + JKS + helloworldKeys.jks + TuscanyWsUserPasswd + + + + + + + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldKeys.jks b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldKeys.jks new file mode 100644 index 0000000000..e2184ad3c6 Binary files /dev/null and b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldKeys.jks differ diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldws.composite b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldws.composite new file mode 100644 index 0000000000..a078067e9a --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldws.composite @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldwsclient.composite b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldwsclient.composite new file mode 100644 index 0000000000..a57f3620ba --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/helloworldwsclient.composite @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/wsdl/helloworld.wsdl b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/wsdl/helloworld.wsdl new file mode 100644 index 0000000000..e6fcc6f4a6 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/main/resources/wsdl/helloworld.wsdl @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/test/java/helloworld/HelloWorldClientTestCase.java b/sca-java-1.x/trunk/itest/serialization-ws/src/test/java/helloworld/HelloWorldClientTestCase.java new file mode 100644 index 0000000000..8dabe87be6 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/test/java/helloworld/HelloWorldClientTestCase.java @@ -0,0 +1,82 @@ +/* + * 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 helloworld; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.host.embedded.SCADomain; +import org.apache.tuscany.sca.host.embedded.SCATestCaseRunner; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Test case for helloworld web service client + */ +public class HelloWorldClientTestCase { + + private HelloWorldService helloWorldService; + private HelloWorldService helloTuscanyService; + private HelloWorldService helloWsPolicyService; + private SCADomain scaDomain; + + private SCATestCaseRunner server; + + @Before + public void startClient() throws Exception { + try { + scaDomain = SCADomain.newInstance("helloworldwsclient.composite"); + helloWorldService = scaDomain.getService(HelloWorldService.class, "HelloWorldServiceComponent"); + helloTuscanyService = scaDomain.getService(HelloWorldService.class, "HelloTuscanyServiceComponent"); + helloWsPolicyService = scaDomain.getService(HelloWorldService.class, "HelloWorldWsPolicyServiceComponent"); + + server = new SCATestCaseRunner(HelloWorldTestServer.class); + server.before(); + + } catch (Throwable e) { + e.printStackTrace(); + } + } + + @Test + public void testWSClient() throws Exception { + String msg = helloWorldService.getGreetings("Smith"); + Assert.assertEquals("Hello Smith", msg); + } + + @Test + public void testEmbeddedReferenceClient() throws Exception { + String msg = helloTuscanyService.getGreetings("Tuscany"); + Assert.assertEquals("Hello Tuscany", msg); + } + + @Test + public void testWsPolicyClient() throws Exception { + String msg = helloWsPolicyService.getGreetings("WsPolicyWorld"); + Assert.assertEquals("Hello WsPolicyWorld", msg); + } + + @After + public void stopClient() throws Exception { + server.after(); + scaDomain.close(); + } + +} diff --git a/sca-java-1.x/trunk/itest/serialization-ws/src/test/java/helloworld/HelloWorldTestServer.java b/sca-java-1.x/trunk/itest/serialization-ws/src/test/java/helloworld/HelloWorldTestServer.java new file mode 100644 index 0000000000..21f2166560 --- /dev/null +++ b/sca-java-1.x/trunk/itest/serialization-ws/src/test/java/helloworld/HelloWorldTestServer.java @@ -0,0 +1,55 @@ +/* + * 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 helloworld; + +import java.io.IOException; +import java.net.Socket; + +import org.apache.tuscany.sca.host.embedded.SCADomain; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Starts up the SCA runtime which starts listening for service requests + */ +public class HelloWorldTestServer { + + private SCADomain scaDomain; + + @Before + public void startServer() throws Exception { + try { + scaDomain = SCADomain.newInstance("helloworldws.composite"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void testPing() throws IOException { + new Socket("127.0.0.1", 8085); + } + + @After + public void stopServer() throws Exception { + scaDomain.close(); + } + +} diff --git a/sca-java-1.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/BusinessInterface.java b/sca-java-1.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/BusinessInterface.java new file mode 100644 index 0000000000..b72199826a --- /dev/null +++ b/sca-java-1.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/BusinessInterface.java @@ -0,0 +1,39 @@ +/* + * 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.runtime; + +/** + * Java business interface for serializing a CallableReference + * + * @version $Rev: 574648 $ $Date: 2007-09-11 18:45:36 +0100 (Tue, 11 Sep 2007) $ + */ +public interface BusinessInterface { + /** + * Get the interface class name + * @return the interface class name + */ + String getInterface(); + + /** + * Set the interface class name + * @param interfaze the interface class name + */ + void setInterface(String interfaze); +} diff --git a/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/BusinessInterfaceImpl.java b/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/BusinessInterfaceImpl.java new file mode 100644 index 0000000000..f2fd3c7080 --- /dev/null +++ b/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/BusinessInterfaceImpl.java @@ -0,0 +1,74 @@ +/* + * 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.core.assembly; + +import org.apache.tuscany.sca.runtime.BusinessInterface; + +/** + * @version $Rev: 574648 $ $Date: 2007-09-11 18:45:36 +0100 (Tue, 11 Sep 2007) $ + */ +public class BusinessInterfaceImpl implements BusinessInterface { + private String interfaze; + + /** + * @return the interface class name + */ + public String getInterface() { + return interfaze; + } + + /** + * @param interfaze the interface class name + */ + public void setInterface(String interfaze) { + this.interfaze = interfaze; + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((interfaze == null) ? 0 : interfaze.hashCode()); + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof BusinessInterfaceImpl)) + return false; + final BusinessInterfaceImpl other = (BusinessInterfaceImpl)obj; + if (interfaze == null) { + if (other.interfaze != null) + return false; + } else if (!interfaze.equals(other.interfaze)) + return false; + return true; + } +} diff --git a/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/BusinessInterfaceProcessor.java b/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/BusinessInterfaceProcessor.java new file mode 100644 index 0000000000..6d4caeb564 --- /dev/null +++ b/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/BusinessInterfaceProcessor.java @@ -0,0 +1,97 @@ +/* + * 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.core.assembly; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; + +import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; +import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; +import org.apache.tuscany.sca.contribution.resolver.ModelResolver; +import org.apache.tuscany.sca.contribution.service.ContributionReadException; +import org.apache.tuscany.sca.contribution.service.ContributionResolveException; +import org.apache.tuscany.sca.contribution.service.ContributionWriteException; +import org.apache.tuscany.sca.monitor.Monitor; +import org.apache.tuscany.sca.runtime.BusinessInterface; + +/** + * Artifact processor for reference parameters. + * + * @version $Rev: 658664 $ $Date: 2008-05-21 13:46:26 +0100 (Wed, 21 May 2008) $ + */ +public class BusinessInterfaceProcessor implements StAXArtifactProcessor { + private static final QName BUSINESS_INTERFACE = + new QName("http://tuscany.apache.org/xmlns/sca/1.0", "businessInterface", "tuscany"); + + /** + * Constructs a new processor. + * + * @param modelFactories + */ + public BusinessInterfaceProcessor(ModelFactoryExtensionPoint modelFactories, Monitor monitor) { + } + + /** + * @see org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor#getArtifactType() + */ + public QName getArtifactType() { + return BUSINESS_INTERFACE; + } + + /** + * @see org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor#read(javax.xml.stream.XMLStreamReader) + */ + public BusinessInterface read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException { + BusinessInterface businessInterface = new BusinessInterfaceImpl(); + businessInterface.setInterface(reader.getAttributeValue(null, "interface")); + return businessInterface; + } + + /** + * @see org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor#write(java.lang.Object, javax.xml.stream.XMLStreamWriter) + */ + public void write(BusinessInterface model, XMLStreamWriter writer) throws ContributionWriteException, + XMLStreamException { + writer.writeStartElement(BUSINESS_INTERFACE.getPrefix(), + BUSINESS_INTERFACE.getLocalPart(), + BUSINESS_INTERFACE.getNamespaceURI()); + writer.writeNamespace(BUSINESS_INTERFACE.getPrefix(), BUSINESS_INTERFACE.getNamespaceURI()); + if (model.getInterface() != null) { + writer.writeAttribute("interface", model.getInterface().toString()); + } + writer.writeEndElement(); + } + + /** + * @see org.apache.tuscany.sca.contribution.processor.ArtifactProcessor#getModelType() + */ + public Class getModelType() { + return BusinessInterface.class; + } + + /** + * @see org.apache.tuscany.sca.contribution.processor.ArtifactProcessor#resolve(java.lang.Object, org.apache.tuscany.sca.contribution.resolver.ModelResolver) + */ + public void resolve(BusinessInterface model, ModelResolver resolver) throws ContributionResolveException { + } + +} diff --git a/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java b/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java index 7d94e73f35..714268a634 100644 --- a/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java +++ b/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java @@ -24,6 +24,8 @@ import java.io.ObjectInput; import java.io.ObjectOutput; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import javax.xml.stream.XMLStreamReader; @@ -32,11 +34,16 @@ import org.apache.tuscany.sca.assembly.Binding; import org.apache.tuscany.sca.assembly.Component; import org.apache.tuscany.sca.assembly.ComponentService; import org.apache.tuscany.sca.assembly.CompositeService; +import org.apache.tuscany.sca.assembly.ConfiguredOperation; +import org.apache.tuscany.sca.assembly.OperationsConfigurator; import org.apache.tuscany.sca.assembly.OptimizableBinding; import org.apache.tuscany.sca.assembly.Reference; import org.apache.tuscany.sca.assembly.SCABinding; import org.apache.tuscany.sca.assembly.Service; import org.apache.tuscany.sca.assembly.builder.BindingBuilderExtension; +import org.apache.tuscany.sca.contribution.resolver.ModelResolver; +import org.apache.tuscany.sca.contribution.resolver.ResolverExtension; +import org.apache.tuscany.sca.core.assembly.BusinessInterfaceImpl; import org.apache.tuscany.sca.core.assembly.CompositeActivator; import org.apache.tuscany.sca.core.assembly.CompositeActivatorImpl; import org.apache.tuscany.sca.core.assembly.EndpointReferenceImpl; @@ -50,6 +57,9 @@ import org.apache.tuscany.sca.core.invocation.ProxyFactory; import org.apache.tuscany.sca.interfacedef.Interface; import org.apache.tuscany.sca.interfacedef.InterfaceContract; import org.apache.tuscany.sca.interfacedef.java.JavaInterface; +import org.apache.tuscany.sca.policy.PolicySet; +import org.apache.tuscany.sca.policy.PolicySetAttachPoint; +import org.apache.tuscany.sca.runtime.BusinessInterface; import org.apache.tuscany.sca.runtime.EndpointReference; import org.apache.tuscany.sca.runtime.ReferenceParameters; import org.apache.tuscany.sca.runtime.RuntimeComponent; @@ -291,10 +301,13 @@ public class CallableReferenceImpl implements CallableReference, Externali this.reference.setComponent(this.component); clonedRef = reference; ReferenceParameters parameters = null; + BusinessInterface businessInterfaceExt = null; for (Object ext : reference.getExtensions()) { if (ext instanceof ReferenceParameters) { parameters = (ReferenceParameters)ext; - break; + } else if (ext instanceof BusinessInterface) { + // this extension will always be present + businessInterfaceExt = (BusinessInterface)ext; } } if (parameters != null) { @@ -344,6 +357,10 @@ public class CallableReferenceImpl implements CallableReference, Externali binding = reference.getBindings().get(0); } } + + ModelResolver resolver = ((ResolverExtension)ComponentContextHelper.getCurrentComponent()).getModelResolver(); + componentContextHelper.resolveInterfaceContract(reference.getInterfaceContract(), resolver); + Interface i = reference.getInterfaceContract().getInterface(); if (i instanceof JavaInterface) { JavaInterface javaInterface = (JavaInterface)i; @@ -360,10 +377,38 @@ public class CallableReferenceImpl implements CallableReference, Externali javaInterface.getJavaClass()); //FIXME: If the interface needs XSDs to be loaded (e.g., for static SDO), // this needs to be done here. We usually search for XSDs in the current - // contribution at resolve time. Is it possible to locate the current - // contribution at runtime? - } + // contribution at resolve time. If we need to add code here to do this, + // we can resolve XSDs using the model resolver for the current component. + } this.businessInterface = (Class)javaInterface.getJavaClass(); + } else { + // Allow privileged access to get ClassLoader. Requires RuntimePermission in + // security policy. + ClassLoader classLoader = AccessController.doPrivileged(new PrivilegedAction() { + public ClassLoader run() { + return Thread.currentThread().getContextClassLoader(); + } + }); + businessInterface = (Class)classLoader.loadClass(businessInterfaceExt.getInterface()); + reference.setReference(componentContextHelper.createReference(businessInterface)); + } + + componentContextHelper.resolveBinding(binding, resolver); + if (binding instanceof PolicySetAttachPoint) { + PolicySetAttachPoint policiedBinding = (PolicySetAttachPoint)binding; + List policySets = policiedBinding.getPolicySets(); + resolvePolicySets(policySets, resolver); + List applicablePolicySets = policiedBinding.getApplicablePolicySets(); + applicablePolicySets.addAll(policySets); + } + if (binding instanceof OperationsConfigurator) { + OperationsConfigurator opConfigurator = (OperationsConfigurator)binding; + for (ConfiguredOperation confOp : opConfigurator.getConfiguredOperations()) { + List policySets = confOp.getPolicySets(); + resolvePolicySets(policySets, resolver); + List applicablePolicySets = confOp.getApplicablePolicySets(); + applicablePolicySets.addAll(policySets); + } } if (binding instanceof BindingBuilderExtension) { ((BindingBuilderExtension)binding).getBuilder().build(component, reference, binding, null); @@ -377,6 +422,26 @@ public class CallableReferenceImpl implements CallableReference, Externali } } } + + /** + * Resolve policy sets attached to a specific SCA Construct + * @param policySets list of attached policy sets + * @param resolver + */ + private void resolvePolicySets(List policySets, ModelResolver resolver) { + List resolvedPolicySets = new ArrayList(); + PolicySet resolvedPolicySet = null; + for (PolicySet policySet : policySets) { + if (policySet.isUnresolved()) { + resolvedPolicySet = resolver.resolveModel(PolicySet.class, policySet); + resolvedPolicySets.add(resolvedPolicySet); + } else { + resolvedPolicySets.add(policySet); + } + } + policySets.clear(); + policySets.addAll(resolvedPolicySets); + } /** * Follow a service promotion chain down to the inner most (non composite) @@ -432,6 +497,9 @@ public class CallableReferenceImpl implements CallableReference, Externali } catch (CloneNotSupportedException e) { // will not happen } + BusinessInterface bizInterface = new BusinessInterfaceImpl(); + bizInterface.setInterface(businessInterface.getName()); + clonedRef.getExtensions().add(bizInterface); } if (refParams == null) { refParams = new ReferenceParametersImpl(); @@ -443,7 +511,6 @@ public class CallableReferenceImpl implements CallableReference, Externali toRemove = extension; } } - if (toRemove != null){ clonedRef.getExtensions().remove(toRemove); } diff --git a/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextHelper.java b/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextHelper.java index 78b0887482..5a93a4d67b 100644 --- a/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextHelper.java +++ b/sca-java-1.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ComponentContextHelper.java @@ -45,6 +45,7 @@ import org.apache.tuscany.sca.assembly.Reference; import org.apache.tuscany.sca.assembly.Service; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint; +import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.assembly.CompositeActivator; import org.apache.tuscany.sca.core.invocation.ThreadMessageContext; import org.apache.tuscany.sca.interfacedef.Interface; @@ -260,6 +261,34 @@ public class ComponentContextHelper { return read(streamReader); } + public void resolveInterfaceContract(InterfaceContract interfaceContract, ModelResolver resolver) throws Exception { + StAXArtifactProcessor processor = staxProcessors.getProcessor(interfaceContract.getClass()); + processor.resolve(interfaceContract, resolver); + } + + public void resolveBinding(Binding binding, ModelResolver resolver) throws Exception { + StAXArtifactProcessor processor = staxProcessors.getProcessor(binding.getClass()); + processor.resolve(binding, resolver); + } + + public Reference createReference(Class businessInterface) throws InvalidInterfaceException { + InterfaceContract interfaceContract = createJavaInterfaceContract(businessInterface); + Reference reference = assemblyFactory.createReference(); + reference.setInterfaceContract(interfaceContract); + return reference; + } + + private InterfaceContract createJavaInterfaceContract(Class businessInterface) throws InvalidInterfaceException { + InterfaceContract interfaceContract = javaInterfaceFactory.createJavaInterfaceContract(); + JavaInterface callInterface = javaInterfaceFactory.createJavaInterface(businessInterface); + interfaceContract.setInterface(callInterface); + if (callInterface.getCallbackClass() != null) { + interfaceContract.setCallbackInterface(javaInterfaceFactory.createJavaInterface( + callInterface.getCallbackClass())); + } + return interfaceContract; + } + public static RuntimeComponent getCurrentComponent() { Message message = ThreadMessageContext.getMessageContext(); if (message != null) { diff --git a/sca-java-1.x/trunk/modules/core/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor b/sca-java-1.x/trunk/modules/core/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor index 5f54178483..dd67278f9a 100644 --- a/sca-java-1.x/trunk/modules/core/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor +++ b/sca-java-1.x/trunk/modules/core/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor @@ -17,3 +17,4 @@ # Implementation class for the artifact processor extension org.apache.tuscany.sca.core.assembly.ReferenceParameterProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.0#referenceParameters,model=org.apache.tuscany.sca.runtime.ReferenceParameters +org.apache.tuscany.sca.core.assembly.BusinessInterfaceProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.0#businessInterface,model=org.apache.tuscany.sca.runtime.BusinessInterface -- cgit v1.2.3