You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by dk...@apache.org on 2014/01/04 03:19:39 UTC
[2/2] git commit: Updates to get everything building and testing with
both 2.7.8 and 3.0.0-SNAPSHOT
Updates to get everything building and testing with both 2.7.8 and 3.0.0-SNAPSHOT
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cbab5bca
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cbab5bca
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cbab5bca
Branch: refs/heads/cxf3
Commit: cbab5bcad2c898643f4a1f20cd9f4db582ff1fa1
Parents: 7d915f4
Author: Daniel Kulp <dk...@apache.org>
Authored: Fri Jan 3 21:18:50 2014 -0500
Committer: Daniel Kulp <dk...@apache.org>
Committed: Fri Jan 3 21:18:50 2014 -0500
----------------------------------------------------------------------
components/camel-cxf/pom.xml | 5 +
.../apache/camel/component/cxf/CxfConsumer.java | 16 ++-
.../apache/camel/component/cxf/CxfEndpoint.java | 83 ++++++++++-----
.../camel/component/cxf/CxfSpringEndpoint.java | 9 +-
.../camel/component/cxf/DefaultCxfBinding.java | 36 ++++++-
.../component/cxf/WSDLServiceConfiguration.java | 106 -------------------
.../component/cxf/WSDLServiceFactoryBean.java | 82 ++++++++++++--
.../component/cxf/cxfbean/CxfBeanEndpoint.java | 4 +-
.../cxf/wsrm/MessageLossSimulator.java | 21 ++--
.../wssecurity/client/UTPasswordCallback.java | 18 ++--
.../wssecurity/server/UTPasswordCallback.java | 17 +--
.../cxf/spring/SpringBusFactoryBeans.xml | 4 +-
12 files changed, 229 insertions(+), 172 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf/pom.xml b/components/camel-cxf/pom.xml
index a05a5b9..96d68b2 100644
--- a/components/camel-cxf/pom.xml
+++ b/components/camel-cxf/pom.xml
@@ -105,6 +105,11 @@
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf-version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-rs-security-oauth</artifactId>
+ <version>${cxf-version}</version>
+ </dependency>
<dependency>
<groupId>org.springframework</groupId>
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
index 478a8d1..cd68921 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
@@ -21,7 +21,9 @@ import java.util.HashMap;
import java.util.Map;
import javax.xml.ws.WebFault;
+
import org.w3c.dom.Element;
+
import org.apache.camel.AsyncCallback;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Processor;
@@ -38,8 +40,8 @@ import org.apache.cxf.message.FaultMode;
import org.apache.cxf.message.Message;
import org.apache.cxf.service.invoker.Invoker;
import org.apache.cxf.service.model.BindingOperationInfo;
-import org.apache.cxf.ws.addressing.AddressingProperties;
import org.apache.cxf.ws.addressing.ContextUtils;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -273,12 +275,18 @@ public class CxfConsumer extends DefaultConsumer {
server.stop();
super.doStop();
}
-
+ private EndpointReferenceType getReplyTo(Object o) {
+ try {
+ return (EndpointReferenceType)o.getClass().getMethod("getReplyTo").invoke(o);
+ } catch (Throwable t) {
+ throw new Fault(t);
+ }
+ }
protected boolean isAsyncInvocationSupported(Exchange cxfExchange) {
Message cxfMessage = cxfExchange.getInMessage();
- AddressingProperties addressingProperties = (AddressingProperties) cxfMessage.get(CxfConstants.WSA_HEADERS_INBOUND);
+ Object addressingProperties = cxfMessage.get(CxfConstants.WSA_HEADERS_INBOUND);
if (addressingProperties != null
- && !ContextUtils.isGenericAddress(addressingProperties.getReplyTo())) {
+ && !ContextUtils.isGenericAddress(getReplyTo(addressingProperties))) {
//it's decoupled endpoint, so already switch thread and
//use executors, which means underlying transport won't
//be block, so we shouldn't rely on continuation in
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
index c46352b..4a07943 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
@@ -16,7 +16,9 @@
*/
package org.apache.camel.component.cxf;
+import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+import java.security.Provider;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -59,7 +61,6 @@ import org.apache.camel.spi.HeaderFilterStrategyAware;
import org.apache.camel.util.EndpointHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.UnsafeUriCharactersEncoder;
-
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.binding.BindingConfiguration;
@@ -67,6 +68,7 @@ import org.apache.cxf.common.classloader.ClassLoaderUtils;
import org.apache.cxf.common.injection.ResourceInjector;
import org.apache.cxf.common.util.ClassHelper;
import org.apache.cxf.common.util.ModCountCopyOnWriteArrayList;
+import org.apache.cxf.common.util.ReflectionUtil;
import org.apache.cxf.databinding.DataBinding;
import org.apache.cxf.databinding.source.SourceDataBinding;
import org.apache.cxf.endpoint.Client;
@@ -91,8 +93,6 @@ import org.apache.cxf.message.MessageContentsList;
import org.apache.cxf.resource.DefaultResourceManager;
import org.apache.cxf.resource.ResourceManager;
import org.apache.cxf.resource.ResourceResolver;
-import org.apache.cxf.service.factory.FactoryBeanListener;
-import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.staxutils.StaxSource;
@@ -155,7 +155,7 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
private BindingConfiguration bindingConfig;
private DataBinding dataBinding;
- private ReflectionServiceFactoryBean serviceFactoryBean;
+ private Object serviceFactoryBean;
private CxfEndpointConfigurer configurer;
@@ -238,7 +238,7 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
}
if (serviceFactoryBean != null) {
- sfb.setServiceFactory(serviceFactoryBean);
+ setServiceFactory(sfb, serviceFactoryBean);
}
if (sfb instanceof JaxWsServerFactoryBean && handlers != null) {
@@ -297,7 +297,7 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
// set the document-literal wrapped style
if (getWrappedStyle() != null && getDataFormat().dealias() != DataFormat.CXF_MESSAGE) {
- sfb.getServiceFactory().setWrapped(getWrappedStyle());
+ setWrapped(sfb, getWrappedStyle());
}
// any optional properties
@@ -340,18 +340,14 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
return new JaxWsClientFactoryBean() {
@Override
protected Client createClient(Endpoint ep) {
- Client client = new CamelCxfClientImpl(getBus(), ep);
- this.getServiceFactory().sendEvent(FactoryBeanListener.Event.CLIENT_CREATED, client, ep);
- return client;
+ return new CamelCxfClientImpl(getBus(), ep);
}
};
} else {
return new ClientFactoryBean() {
@Override
protected Client createClient(Endpoint ep) {
- Client client = new CamelCxfClientImpl(getBus(), ep);
- this.getServiceFactory().sendEvent(FactoryBeanListener.Event.CLIENT_CREATED, client, ep);
- return client;
+ return new CamelCxfClientImpl(getBus(), ep);
}
};
}
@@ -361,13 +357,10 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
* Create a client factory bean object without serviceClass interface.
*/
protected ClientFactoryBean createClientFactoryBean() {
- return new ClientFactoryBean(new WSDLServiceFactoryBean()) {
-
+ ClientFactoryBean cf = new ClientFactoryBean() {
@Override
protected Client createClient(Endpoint ep) {
- Client client = new CamelCxfClientImpl(getBus(), ep);
- this.getServiceFactory().sendEvent(FactoryBeanListener.Event.CLIENT_CREATED, client, ep);
- return client;
+ return new CamelCxfClientImpl(getBus(), ep);
}
@Override
@@ -375,13 +368,26 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
// Do nothing here
}
};
+ for (Method m : cf.getClass().getMethods()) {
+ if ("setServiceFactory".equals(m.getName())) {
+ try {
+ ReflectionUtil.setAccessible(m).invoke(cf, new WSDLServiceFactoryBean());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ return cf;
}
- protected void setupHandlers(ClientFactoryBean factoryBean, Client client) {
+ protected void setupHandlers(ClientFactoryBean factoryBean, Client client)
+ throws Exception {
if (factoryBean instanceof JaxWsClientFactoryBean && handlers != null) {
- AnnotationHandlerChainBuilder builder = new AnnotationHandlerChainBuilder();
- JaxWsServiceFactoryBean sf = (JaxWsServiceFactoryBean)factoryBean.getServiceFactory();
+ AnnotationHandlerChainBuilder
+ builder = new AnnotationHandlerChainBuilder();
+ Method m = factoryBean.getClass().getMethod("getServiceFactory");
+ JaxWsServiceFactoryBean sf = (JaxWsServiceFactoryBean)m.invoke(factoryBean);
@SuppressWarnings("rawtypes")
List<Handler> chain = new ArrayList<Handler>(handlers);
@@ -432,7 +438,7 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
}
if (serviceFactoryBean != null) {
- factoryBean.setServiceFactory(serviceFactoryBean);
+ setServiceFactory(factoryBean, serviceFactoryBean);
}
// address
@@ -477,7 +483,7 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
// set the document-literal wrapped style
if (getWrappedStyle() != null) {
- factoryBean.getServiceFactory().setWrapped(getWrappedStyle());
+ setWrapped(factoryBean, getWrappedStyle());
}
// any optional properties
@@ -514,6 +520,28 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
// Package private methods
// -------------------------------------------------------------------------
+ private void setWrapped(Object factoryBean, boolean wrapped) {
+ try {
+ Object sf = factoryBean.getClass().getMethod("getServiceFactory").invoke(factoryBean);
+ sf.getClass().getMethod("setWrapped", Boolean.TYPE).invoke(sf, wrapped);
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
+ }
+ }
+
+ private void setServiceFactory(Object factoryBean, Object serviceFactoryBean2) {
+ for (Method m : factoryBean.getClass().getMethods()) {
+ if ("setServiceFactory".equals(m.getName())
+ && m.getParameterTypes()[0].isInstance(serviceFactoryBean2)) {
+ try {
+ ReflectionUtil.setAccessible(m).invoke(factoryBean, serviceFactoryBean2);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ }
+
/**
* Create a CXF client object
*/
@@ -593,7 +621,12 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
if (cls == null) {
checkName(portName, " endpoint/port name");
checkName(serviceName, " service name");
- answer = new ServerFactoryBean(new WSDLServiceFactoryBean());
+ answer = new JaxWsServerFactoryBean(new WSDLServiceFactoryBean()) {
+ {
+ doInit = false;
+ }
+ };
+ cls = Provider.class;
} else if (CxfEndpointUtils.hasWebServiceAnnotation(cls)) {
answer = new JaxWsServerFactoryBean();
} else {
@@ -1105,11 +1138,11 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
this.dataBinding = dataBinding;
}
- public ReflectionServiceFactoryBean getServiceFactoryBean() {
+ public Object getServiceFactoryBean() {
return serviceFactoryBean;
}
- public void setServiceFactoryBean(ReflectionServiceFactoryBean serviceFactoryBean) {
+ public void setServiceFactoryBean(Object serviceFactoryBean) {
this.serviceFactoryBean = serviceFactoryBean;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java
index 01d1a55..39558b1 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfSpringEndpoint.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.cxf;
+import java.security.Provider;
+
import javax.xml.namespace.QName;
import org.apache.camel.component.cxf.common.message.CxfConstants;
@@ -172,7 +174,12 @@ public class CxfSpringEndpoint extends CxfEndpoint implements ApplicationContext
if (cls == null) {
if (!getDataFormat().equals(DataFormat.POJO)) {
- answer = new ServerFactoryBean(new WSDLServiceFactoryBean());
+ answer = new JaxWsServerFactoryBean(new WSDLServiceFactoryBean()) {
+ {
+ doInit = false;
+ }
+ };
+ cls = Provider.class;
} else {
ObjectHelper.notNull(cls, CxfConstants.SERVICE_CLASS);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
index 2657508..f0dcc6d 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.cxf;
import java.io.InputStream;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
@@ -53,7 +54,6 @@ import org.apache.cxf.binding.soap.Soap11;
import org.apache.cxf.binding.soap.Soap12;
import org.apache.cxf.binding.soap.SoapBindingConstants;
import org.apache.cxf.binding.soap.SoapHeader;
-import org.apache.cxf.common.util.ReflectionUtil;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.headers.Header;
@@ -869,7 +869,7 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware
Object httpresp = cxfExchange.getInMessage().get("HTTP.RESPONSE");
if (httpresp != null) {
try {
- Method m = ReflectionUtil.findMethod(httpresp.getClass(), "setStatus", int.class);
+ Method m = findMethod(httpresp.getClass(), "setStatus", int.class);
if (m != null) {
m.invoke(httpresp, 202);
}
@@ -878,4 +878,36 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware
}
}
}
+ public static Method findMethod(Class<?> cls,
+ String name,
+ Class<?> ... params) {
+ if (cls == null) {
+ return null;
+ }
+ for (Class<?> cs : cls.getInterfaces()) {
+ if (Modifier.isPublic(cs.getModifiers())) {
+ Method m = findMethod(cs, name, params);
+ if (m != null && Modifier.isPublic(m.getModifiers())) {
+ return m;
+ }
+ }
+ }
+ try {
+ Method m = cls.getDeclaredMethod(name, params);
+ if (m != null && Modifier.isPublic(m.getModifiers())) {
+ return m;
+ }
+ } catch (Exception e) {
+ //ignore
+ }
+ Method m = findMethod(cls.getSuperclass(), name, params);
+ if (m == null) {
+ try {
+ m = cls.getMethod(name, params);
+ } catch (Exception e) {
+ //ignore
+ }
+ }
+ return m;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceConfiguration.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceConfiguration.java
deleted file mode 100644
index c928a51..0000000
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceConfiguration.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * 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.camel.component.cxf;
-
-import java.util.Map;
-
-import javax.wsdl.Definition;
-import javax.wsdl.Service;
-import javax.xml.namespace.QName;
-
-import org.apache.camel.RuntimeCamelException;
-import org.apache.cxf.helpers.CastUtils;
-import org.apache.cxf.service.factory.AbstractServiceConfiguration;
-import org.apache.cxf.wsdl.WSDLManager;
-
-/**
- * This class will help the WSDLServiceFactoryBean to look up the ServiceName and PortName from WSDL
- */
-public class WSDLServiceConfiguration extends AbstractServiceConfiguration {
-
- private WSDLServiceFactoryBean serviceFactoryBean;
- private Definition definition;
- private QName serviceQName;
- private QName endpointQName;
-
- public WSDLServiceConfiguration(WSDLServiceFactoryBean factoryBean) {
- this.serviceFactoryBean = factoryBean;
- }
-
- protected Definition getDefinition() {
- if (definition == null) {
- try {
- definition = serviceFactoryBean.getBus().getExtension(WSDLManager.class).getDefinition(serviceFactoryBean.getWsdlURL());
- } catch (Exception ex) {
- throw new RuntimeCamelException(ex);
- }
- }
- return definition;
- }
-
- protected QName getServiceQName() {
- if (serviceQName == null) {
- Map<QName, ?> services = CastUtils.cast(getDefinition().getServices());
- if (services.size() == 0) {
- throw new IllegalArgumentException("There is no service in the WSDL" + serviceFactoryBean.getWsdlURL());
- }
- if (services.size() > 1) {
- throw new IllegalArgumentException("service name must be specified, there is more than one service in the WSDL" + serviceFactoryBean.getWsdlURL());
- }
- serviceQName = services.keySet().iterator().next();
- }
- return serviceQName;
- }
-
- protected QName getEndpointQName() {
- if (endpointQName == null) {
- Service service = getDefinition().getService(serviceFactoryBean.getServiceQName());
- if (service == null) {
- throw new IllegalArgumentException("There is no service " + serviceFactoryBean.getServiceQName()
- + " in WSDL " + serviceFactoryBean.getWsdlURL());
- }
- Map<String, ?> ports = CastUtils.cast(service.getPorts());
- if (ports.size() == 0) {
- throw new IllegalArgumentException("There is no port/endpoint in the service "
- + serviceFactoryBean.getServiceQName() + "of WSDL"
- + serviceFactoryBean.getWsdlURL());
- }
- if (ports.size() > 1) {
- throw new IllegalArgumentException("Port/endpoint name must be specified, There is more than one port in the service"
- + serviceFactoryBean.getServiceQName()
- + " of the WSDL" + serviceFactoryBean.getWsdlURL());
- }
- endpointQName = new QName(service.getQName().getNamespaceURI(), ports.keySet().iterator().next());
-
- }
- return endpointQName;
- }
-
- public String getServiceName() {
- return getServiceQName().getLocalPart();
- }
-
- public String getServiceNamespace() {
- return getServiceQName().getNamespaceURI();
- }
-
- public QName getEndpointName() {
- return getEndpointQName();
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceFactoryBean.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceFactoryBean.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceFactoryBean.java
index 45e9e20..f7a9ef2 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceFactoryBean.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/WSDLServiceFactoryBean.java
@@ -16,12 +16,23 @@
*/
package org.apache.camel.component.cxf;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Map;
-import org.apache.cxf.service.factory.AbstractServiceConfiguration;
-import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
+import javax.wsdl.Definition;
+import javax.wsdl.Service;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Provider;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.endpoint.EndpointException;
+import org.apache.cxf.endpoint.EndpointImpl;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
+import org.apache.cxf.service.factory.FactoryBeanListener.Event;
import org.apache.cxf.service.invoker.Invoker;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.wsdl.WSDLManager;
/**
* A service factory bean class that create a service factory without requiring a service class
@@ -30,14 +41,65 @@ import org.apache.cxf.service.invoker.Invoker;
* there is service name or port/endpoint name setted.
* @version
*/
-public class WSDLServiceFactoryBean extends ReflectionServiceFactoryBean {
+public class WSDLServiceFactoryBean extends JaxWsServiceFactoryBean {
+ private Definition definition;
+
public WSDLServiceFactoryBean() {
- // set up the service configure to help us find the service name and endpoint name from WSDL
- WSDLServiceConfiguration configuration = new WSDLServiceConfiguration(this);
- List<AbstractServiceConfiguration> list = new ArrayList<AbstractServiceConfiguration>();
- list.add(configuration);
- this.setServiceConfigurations(list);
+ setServiceClass(Provider.class);
+ }
+ public void setServiceClass(Class<?> serviceClass) {
+ if (serviceClass != null) {
+ super.setServiceClass(serviceClass);
+ }
+ }
+ protected Definition getDefinition(String url) {
+ if (definition == null) {
+ try {
+ definition = getBus().getExtension(WSDLManager.class).getDefinition(url);
+ } catch (Exception ex) {
+ throw new RuntimeCamelException(ex);
+ }
+ }
+
+ if (this.getServiceQName(false) == null) {
+ Map<QName, ?> services = CastUtils.cast(definition.getServices());
+ if (services.size() == 0) {
+ throw new IllegalArgumentException("There is no service in the WSDL" + url);
+ }
+ if (services.size() > 1) {
+ throw new IllegalArgumentException("service name must be specified, there is more than one service in the WSDL" + url);
+ }
+ QName serviceQName = services.keySet().iterator().next();
+ this.setServiceName(serviceQName);
+ }
+
+ if (this.getEndpointName(false) == null) {
+ Service service = definition.getService(getServiceQName(false));
+ Map<String, ?> ports = CastUtils.cast(service.getPorts());
+ if (ports.size() == 0) {
+ throw new IllegalArgumentException("There is no port/endpoint in the service "
+ + getServiceQName() + "of WSDL"
+ + url);
+ }
+ if (ports.size() > 1) {
+ throw new IllegalArgumentException("Port/endpoint name must be specified, There is more than one port in the service"
+ + service.getQName()
+ + " of the WSDL" + url);
+ }
+ QName endpointQName = new QName(service.getQName().getNamespaceURI(), ports.keySet().iterator().next());
+ setEndpointName(endpointQName);
+ }
+ return definition;
+ }
+ protected void buildServiceFromWSDL(String url) {
+ getDefinition(url);
+ super.buildServiceFromWSDL(url);
+ }
+ public Endpoint createEndpoint(EndpointInfo ei) throws EndpointException {
+ Endpoint ep = new EndpointImpl(getBus(), getService(), ei);
+ sendEvent(Event.ENDPOINT_CREATED, ei, ep, getServiceClass());
+ return ep;
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/cxfbean/CxfBeanEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/cxfbean/CxfBeanEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/cxfbean/CxfBeanEndpoint.java
index d2e6ad9..b4af010 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/cxfbean/CxfBeanEndpoint.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/cxfbean/CxfBeanEndpoint.java
@@ -115,8 +115,8 @@ public class CxfBeanEndpoint extends ProcessorEndpoint implements HeaderFilterSt
bean.setServiceClass(serviceBeans.get(0).getClass());
// set the bean instance as well, otherwise CXF will re-create a new instance of the class
bean.setServiceBean(serviceBeans.get(0));
- if (bean.getServiceFactory() != null) {
- bean.getServiceFactory().setPopulateFromClass(isPopulateFromClass());
+ if (bean.getJaxWsServiceFactory() != null) {
+ bean.getJaxWsServiceFactory().setPopulateFromClass(isPopulateFromClass());
}
bean.setBus(bus);
bean.setStart(true);
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/MessageLossSimulator.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/MessageLossSimulator.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/MessageLossSimulator.java
index 751f310..76ded1b 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/MessageLossSimulator.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/MessageLossSimulator.java
@@ -30,7 +30,6 @@ import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.phase.PhaseInterceptor;
-import org.apache.cxf.ws.addressing.AddressingProperties;
import org.apache.cxf.ws.rm.RMContextUtils;
import org.slf4j.Logger;
@@ -46,15 +45,23 @@ public class MessageLossSimulator extends AbstractPhaseInterceptor<Message> {
addBefore(MessageSenderInterceptor.class.getName());
}
-
+ private static String getAction(Object map) {
+ if (map == null) {
+ return null;
+ }
+ try {
+ Object o = map.getClass().getMethod("getAction").invoke(map);
+ return (String)o.getClass().getMethod("getValue").invoke(o);
+ } catch (Throwable t) {
+ throw new Fault(t);
+ }
+ }
public void handleMessage(Message message) throws Fault {
- AddressingProperties maps =
+ Object maps =
RMContextUtils.retrieveMAPs(message, false, true);
// RMContextUtils.ensureExposedVersion(maps);
- String action = null;
- if (maps != null && null != maps.getAction()) {
- action = maps.getAction().getValue();
- }
+ String action = getAction(maps);
+
if (RMContextUtils.isRMProtocolMessage(action)) {
return;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java
index ab45026..cf97dde 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java
@@ -24,7 +24,6 @@ import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
-import org.apache.ws.security.WSPasswordCallback;
/**
*/
@@ -47,12 +46,17 @@ public class UTPasswordCallback implements CallbackHandler {
*/
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (Callback callback : callbacks) {
- WSPasswordCallback pc = (WSPasswordCallback)callback;
-
- String pass = passwords.get(pc.getIdentifier());
- if (pass != null) {
- pc.setPassword(pass);
- return;
+ try {
+ String id = (String)callback.getClass().getMethod("getIdentifier").invoke(callback);
+ String pass = passwords.get(id);
+ if (pass != null) {
+ callback.getClass().getMethod("setPassword", String.class).invoke(callback, pass);
+ return;
+ }
+ } catch (Exception ex) {
+ UnsupportedCallbackException e = new UnsupportedCallbackException(callback);
+ e.initCause(ex);
+ throw e;
}
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java
index 9fe1a6b..91764d6 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java
@@ -24,7 +24,6 @@ import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
-import org.apache.ws.security.WSPasswordCallback;
/**
*/
@@ -47,12 +46,18 @@ public class UTPasswordCallback implements CallbackHandler {
*/
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (Callback callback : callbacks) {
- WSPasswordCallback pc = (WSPasswordCallback)callback;
+ try {
+ String id = (String)callback.getClass().getMethod("getIdentifier").invoke(callback);
- String pass = passwords.get(pc.getIdentifier());
- if (pass != null) {
- pc.setPassword(pass);
- return;
+ String pass = passwords.get(id);
+ if (pass != null) {
+ callback.getClass().getMethod("setPassword", String.class).invoke(callback, pass);
+ return;
+ }
+ } catch (Exception ex) {
+ UnsupportedCallbackException e = new UnsupportedCallbackException(callback);
+ e.initCause(ex);
+ throw e;
}
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/cbab5bca/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/SpringBusFactoryBeans.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/SpringBusFactoryBeans.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/SpringBusFactoryBeans.xml
index 1eaa572..c60bb7f 100644
--- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/SpringBusFactoryBeans.xml
+++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/SpringBusFactoryBeans.xml
@@ -24,12 +24,12 @@
">
<bean id="cxfBus" class="org.apache.camel.component.cxf.spring.SpringBusFactoryBean">
- <property name="cfgFiles" value="META-INF/cxf/cxf.xml;META-INF/cxf/cxf-extension-soap.xml" />
+ <property name="cfgFiles" value="META-INF/cxf/cxf.xml;META-INF/cxf/cxf.xml" />
<property name="includeDefaultBus" value="false" />
</bean>
<bean id="myBus" class="org.apache.camel.component.cxf.spring.SpringBusFactoryBean">
- <property name="cfgFiles" value="META-INF/cxf/cxf-extension-soap.xml" />
+ <property name="cfgFiles" value="META-INF/cxf/cxf.xml" />
<property name="includeDefaultBus" value="true" />
</bean>