Author: tcunning
Date: Wed Sep 28 20:20:12 2011
New Revision: 1177045
URL: http://svn.apache.org/viewvc?rev=1177045&view=rev
Log:
JUDDI-530
Add custom CXF interceptor and a SAPRegistryJAXWSTransport.
Added:
juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/SAPRegistryJAXWSTransport.java
juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/XMLDeclarationWritingInterceptor.java
Modified:
juddi/trunk/juddi-client/pom.xml
Modified: juddi/trunk/juddi-client/pom.xml
URL:
http://svn.apache.org/viewvc/juddi/trunk/juddi-client/pom.xml?rev=1177045&r1=1177044&r2=1177045&view=diff
==============================================================================
--- juddi/trunk/juddi-client/pom.xml (original)
+++ juddi/trunk/juddi-client/pom.xml Wed Sep 28 20:20:12 2011
@@ -25,6 +25,10 @@
<artifactId>juddi-client</artifactId>
<packaging>bundle</packaging>
<name>jUDDI Client side Code</name>
+ <properties>
+ <cxf.version>2.3.6</cxf.version>
+ </properties>
+
<dependencies>
<dependency>
<groupId>org.apache.juddi</groupId>
@@ -36,7 +40,7 @@
<artifactId>commons-configuration</artifactId>
<version>1.6</version>
</dependency>
- <dependency>
+ <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
@@ -46,8 +50,23 @@
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
- </dependency>
-
-
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-frontend-jaxws</artifactId>
+ <version>${cxf.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http</artifactId>
+ <version>${cxf.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>cglib</groupId>
+ <artifactId>cglib</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
</dependencies>
</project>
Added:
juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/SAPRegistryJAXWSTransport.java
URL:
http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/SAPRegistryJAXWSTransport.java?rev=1177045&view=auto
==============================================================================
---
juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/SAPRegistryJAXWSTransport.java
(added)
+++
juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/SAPRegistryJAXWSTransport.java
Wed Sep 28 20:20:12 2011
@@ -0,0 +1,264 @@
+/*
+ * Copyright 2001-2009 The Apache Software Foundation.
+ *
+ * Licensed 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.juddi.v3.client.transport;
+
+import java.util.Map;
+import java.util.Properties;
+
+import javax.xml.ws.BindingProvider;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.juddi.v3.client.JUDDIApiService;
+import org.apache.juddi.v3.client.UDDIService;
+import org.apache.juddi.v3.client.config.Property;
+import org.apache.juddi.v3.client.config.UDDIClerkManager;
+import org.apache.juddi.v3.client.config.UDDIClientContainer;
+import org.apache.juddi.v3_service.JUDDIApiPortType;
+import org.uddi.v3_service.UDDICustodyTransferPortType;
+import org.uddi.v3_service.UDDIInquiryPortType;
+import org.uddi.v3_service.UDDIPublicationPortType;
+import org.uddi.v3_service.UDDISecurityPortType;
+import org.uddi.v3_service.UDDISubscriptionListenerPortType;
+import org.uddi.v3_service.UDDISubscriptionPortType;
+
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.frontend.ClientProxy;
+
+/**
+ * Add a special JAXWSTransport for use with the SAP Registry. Need to add
+ * a CXF interceptor because SAP does not like the default XML declaration.
+ *
+ * @author Tom Cunningham <[email protected]>
+ *
+ */
+public class SAPRegistryJAXWSTransport extends JAXWSTransport {
+
+ public SAPRegistryJAXWSTransport() {
+ super();
+ }
+
+ public SAPRegistryJAXWSTransport(String nodeName) {
+ super(nodeName);
+ }
+
+ public SAPRegistryJAXWSTransport(String managerName, String nodeName) {
+ super(managerName, nodeName);
+ }
+
+ public UDDIInquiryPortType getUDDIInquiryService(String endpointURL)
throws TransportException {
+
+ if (inquiryService==null) {
+ try {
+ if (endpointURL==null) {
+ UDDIClerkManager manager =
UDDIClientContainer.getUDDIClerkManager(managerName);
+ endpointURL =
manager.getClientConfig().getUDDINode(nodeName).getInquiryUrl();
+ }
+ UDDIService service = new UDDIService();
+ inquiryService = service.getUDDIInquiryPort();
+ Map<String, Object> requestContext =
((BindingProvider) inquiryService).getRequestContext();
+
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
+ setCredentials(requestContext);
+
+ XMLDeclarationWritingInterceptor xmldwi = new
XMLDeclarationWritingInterceptor();
+ Client cxfClient =
ClientProxy.getClient(inquiryService);
+ cxfClient.getInInterceptors().add(xmldwi);
+ } catch (Exception e) {
+ throw new TransportException(e.getMessage(), e);
+ }
+ }
+ return inquiryService;
+ }
+
+ public UDDISecurityPortType getUDDISecurityService(String endpointURL)
throws TransportException {
+
+ if (securityService==null) {
+ try {
+ if (endpointURL==null) {
+ UDDIClerkManager manager =
UDDIClientContainer.getUDDIClerkManager(managerName);
+ endpointURL =
manager.getClientConfig().getUDDINode(nodeName).getSecurityUrl();
+ }
+ UDDIService service = new UDDIService();
+ securityService = service.getUDDISecurityPort();
+ Map<String, Object> requestContext =
((BindingProvider) securityService).getRequestContext();
+
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
+ setCredentials(requestContext);
+
+ XMLDeclarationWritingInterceptor xmldwi = new
XMLDeclarationWritingInterceptor();
+ Client cxfClient =
ClientProxy.getClient(securityService);
+ cxfClient.getInInterceptors().add(xmldwi);
+
+ } catch (Exception e) {
+ throw new TransportException(e.getMessage(), e);
+ }
+ }
+ return securityService;
+ }
+
+ public UDDIPublicationPortType getUDDIPublishService(String
endpointURL) throws TransportException {
+
+ if (publishService==null) {
+ try {
+ if (endpointURL==null) {
+ UDDIClerkManager manager =
UDDIClientContainer.getUDDIClerkManager(managerName);
+ endpointURL =
manager.getClientConfig().getUDDINode(nodeName).getPublishUrl();
+ }
+ UDDIService service = new UDDIService();
+ publishService =
service.getUDDIPublicationPort();
+ Map<String, Object> requestContext =
((BindingProvider) publishService).getRequestContext();
+
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
+ setCredentials(requestContext);
+
+ XMLDeclarationWritingInterceptor xmldwi = new
XMLDeclarationWritingInterceptor();
+ Client cxfClient =
ClientProxy.getClient(publishService);
+ cxfClient.getInInterceptors().add(xmldwi);
+
+ } catch (Exception e) {
+ throw new TransportException(e.getMessage(), e);
+ }
+ }
+ return publishService;
+ }
+
+ public UDDISubscriptionPortType getUDDISubscriptionService(String
endpointURL) throws TransportException {
+
+ if (subscriptionService==null) {
+ try {
+ if (endpointURL==null) {
+ UDDIClerkManager manager =
UDDIClientContainer.getUDDIClerkManager(managerName);
+ endpointURL =
manager.getClientConfig().getUDDINode(nodeName).getSubscriptionUrl();
+ }
+ UDDIService service = new UDDIService();
+ subscriptionService =
service.getUDDISubscriptionPort();
+ Map<String, Object> requestContext =
((BindingProvider) subscriptionService).getRequestContext();
+
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
+ setCredentials(requestContext);
+
+ XMLDeclarationWritingInterceptor xmldwi = new
XMLDeclarationWritingInterceptor();
+ Client cxfClient =
ClientProxy.getClient(subscriptionService);
+ cxfClient.getInInterceptors().add(xmldwi);
+
+ } catch (Exception e) {
+ throw new TransportException(e.getMessage(), e);
+ }
+ }
+ return subscriptionService;
+ }
+
+ public UDDISubscriptionListenerPortType
getUDDISubscriptionListenerService(String endpointURL) throws
TransportException {
+ if (subscriptionListenerService == null) {
+ try {
+ if (endpointURL==null) {
+ UDDIClerkManager manager =
UDDIClientContainer.getUDDIClerkManager(managerName);
+ endpointURL =
manager.getClientConfig().getUDDINode(nodeName).getSubscriptionListenerUrl();
+ }
+ UDDIService service = new UDDIService();
+ subscriptionListenerService =
service.getUDDISubscriptionListenerPort();
+ Map<String, Object> requestContext =
((BindingProvider) subscriptionListenerService).getRequestContext();
+
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
+ setCredentials(requestContext);
+
+ XMLDeclarationWritingInterceptor xmldwi = new
XMLDeclarationWritingInterceptor();
+ Client cxfClient =
ClientProxy.getClient(subscriptionListenerService);
+ cxfClient.getInInterceptors().add(xmldwi);
+
+ } catch (Exception e) {
+ throw new TransportException(e.getMessage(), e);
+ }
+ }
+ return subscriptionListenerService;
+ }
+
+ public UDDICustodyTransferPortType getUDDICustodyTransferService(String
endpointURL) throws TransportException {
+ if (custodyTransferService == null) {
+ try {
+ if (endpointURL==null) {
+ UDDIClerkManager manager =
UDDIClientContainer.getUDDIClerkManager(managerName);
+ endpointURL =
manager.getClientConfig().getUDDINode(nodeName).getCustodyTransferUrl();
+ }
+ UDDIService service = new UDDIService();
+ custodyTransferService =
service.getUDDICustodyPort();
+ Map<String, Object> requestContext =
((BindingProvider) custodyTransferService).getRequestContext();
+
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
+ setCredentials(requestContext);
+
+ XMLDeclarationWritingInterceptor xmldwi = new
XMLDeclarationWritingInterceptor();
+ Client cxfClient =
ClientProxy.getClient(custodyTransferService);
+ cxfClient.getInInterceptors().add(xmldwi);
+
+ } catch (Exception e) {
+ throw new TransportException(e.getMessage(), e);
+ }
+ }
+ return custodyTransferService;
+ }
+
+ /**
+ * This is a jUDDI specific API
+ */
+ public JUDDIApiPortType getJUDDIApiService(String endpointURL) throws
TransportException {
+ if (publisherService == null) {
+ try {
+ if (endpointURL==null) {
+ UDDIClerkManager manager =
UDDIClientContainer.getUDDIClerkManager(managerName);
+ endpointURL =
manager.getClientConfig().getUDDINode(nodeName).getJuddiApiUrl();
+ }
+ JUDDIApiService service = new JUDDIApiService();
+ publisherService = (JUDDIApiPortType)
service.getPort(JUDDIApiPortType.class);
+ Map<String, Object> requestContext =
((BindingProvider) publisherService).getRequestContext();
+
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
+ setCredentials(requestContext);
+ } catch (Exception e) {
+ throw new TransportException(e.getMessage(), e);
+ }
+ }
+ return publisherService;
+ }
+
+ public String getNodeName() {
+ return nodeName;
+ }
+
+ public void setNodeName(String nodeName) {
+ this.nodeName = nodeName;
+ }
+
+ /**
+ * Sets the credentials on the RequestContext if the services are
protected
+ * by Basic Authentication. The username and password are obtained from
the
+ * uddi.xml.
+ *
+ * @param requestContext
+ * @throws ConfigurationException
+ */
+ private void setCredentials(Map<String, Object> requestContext) throws
ConfigurationException {
+ UDDIClerkManager manager =
UDDIClientContainer.getUDDIClerkManager(managerName);
+ Properties properties =
manager.getClientConfig().getUDDINode(nodeName).getProperties();
+ String username = null;
+ String password = null;
+ if (properties.containsKey(Property.BASIC_AUTH_USERNAME)) {
+ username =
properties.getProperty(Property.BASIC_AUTH_USERNAME);
+ }
+ if (properties.containsKey(Property.BASIC_AUTH_PASSWORD)) {
+ password =
properties.getProperty(Property.BASIC_AUTH_PASSWORD);
+ }
+ if (username!=null && password!=null) {
+ requestContext.put(BindingProvider.USERNAME_PROPERTY,
username);
+ requestContext.put(BindingProvider.PASSWORD_PROPERTY,
password);
+ }
+ }
+
+}
Added:
juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/XMLDeclarationWritingInterceptor.java
URL:
http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/XMLDeclarationWritingInterceptor.java?rev=1177045&view=auto
==============================================================================
---
juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/XMLDeclarationWritingInterceptor.java
(added)
+++
juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/transport/XMLDeclarationWritingInterceptor.java
Wed Sep 28 20:20:12 2011
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2001-2009 The Apache Software Foundation.
+ *
+ * Licensed 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.juddi.v3.client.transport;
+
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.StaxOutInterceptor;
+import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
+import java.io.OutputStream;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+
+/**
+ * Add a CXF interceptor to add the XML declaration.
+ *
+ * * @author Tom Cunningham <[email protected]>
+ *
+ */
+public class XMLDeclarationWritingInterceptor extends
AbstractPhaseInterceptor<SoapMessage> {
+
+ public XMLDeclarationWritingInterceptor () {
+ super(Phase.PRE_STREAM);
+ addBefore(StaxOutInterceptor.class.getName());
+ }
+
+ @Override
+ public void handleMessage(SoapMessage message) throws Fault {
+ message.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]