Author: dkulp
Date: Fri Nov 30 11:29:15 2007
New Revision: 599924
URL: http://svn.apache.org/viewvc?rev=599924&view=rev
Log:
Merged revisions 598856 via svnmerge from
https://svn.apache.org/repos/asf/incubator/cxf/trunk
........
r598856 | bimargulies | 2007-11-27 22:05:10 -0500 (Tue, 27 Nov 2007) | 6 lines
Set up namespace control conveniently for JAXB. The JAXBDataBinding now
has a property, just like Aegis, that provides a map from URI to prefix.
This is used by JAXB on the wire. Those users who want to tweak namespace
prefixes are now good to go.
........
Added:
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/QualifiedBean.java
- copied unchanged from r598856,
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/QualifiedBean.java
Modified:
incubator/cxf/branches/2.0.x-fixes/ (props changed)
incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java
Propchange: incubator/cxf/branches/2.0.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified:
incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
(original)
+++
incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
Fri Nov 30 11:29:15 2007
@@ -20,6 +20,9 @@
package org.apache.cxf.databinding.source;
import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
import javax.xml.transform.dom.DOMSource;
@@ -36,6 +39,7 @@
public class AbstractDataBinding {
private Collection<DOMSource> schemas;
+ private Map<String, String> namespaceMap;
public Collection<DOMSource> getSchemas() {
return schemas;
@@ -69,5 +73,48 @@
schema.setSchema(xmlSchema);
serviceInfo.addSchema(schema);
return xmlSchema;
+ }
+
+ /**
+ * @return Returns the namespaceMap.
+ */
+ public Map<String, String> getNamespaceMap() {
+ return namespaceMap;
+ }
+
+ /**
+ * @param namespaceMap The namespaceMap to set.
+ */
+ public void setNamespaceMap(Map<String, String> namespaceMap) {
+ // make some checks. This is a map from namespace to prefix, but we
want unique prefixes.
+ if (namespaceMap != null) {
+ Set<String> prefixesSoFar = new HashSet<String>();
+ for (Map.Entry<String, String> mapping : namespaceMap.entrySet()) {
+ if (prefixesSoFar.contains(mapping.getValue())) {
+ throw new IllegalArgumentException("Duplicate prefix " +
mapping.getValue());
+ }
+ }
+ }
+ this.namespaceMap = namespaceMap;
+ }
+
+ /**
+ * Provide explicit mappings to ReflectionServiceFactory.
+ * [EMAIL PROTECTED]
+ * */
+ public Map<String, String> getDeclaredNamespaceMappings() {
+ return this.namespaceMap;
+ }
+
+ protected static void checkNamespaceMap(Map<String, String> namespaceMap) {
+ // make some checks. This is a map from namespace to prefix, but we
want unique prefixes.
+ if (namespaceMap != null) {
+ Set<String> prefixesSoFar = new HashSet<String>();
+ for (Map.Entry<String, String> mapping : namespaceMap.entrySet()) {
+ if (prefixesSoFar.contains(mapping.getValue())) {
+ throw new IllegalArgumentException("Duplicate prefix " +
mapping.getValue());
+ }
+ }
+ }
}
}
Modified:
incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
(original)
+++
incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
Fri Nov 30 11:29:15 2007
@@ -92,8 +92,6 @@
private Map<MessagePartInfo, Type> part2Type;
private List overrideTypes;
private Service service;
- // allow applications to express an opinion about the namespace prefixes.
- private Map<String, String> namespaceMap;
public AegisDatabinding() {
super();
@@ -318,6 +316,8 @@
}
}
+ Map<String, String> namespaceMap = getDeclaredNamespaceMappings();
+
for (Map.Entry<String, Set<Type>> entry : tns2Type.entrySet()) {
String xsdPrefix = XmlConstants.XSD_PREFIX;
if (namespaceMap != null &&
namespaceMap.containsKey(XmlConstants.XSD)) {
@@ -474,37 +474,6 @@
public Service getService() {
return service;
- }
-
- /**
- * @return Returns the namespaceMap.
- */
- public Map<String, String> getNamespaceMap() {
- return namespaceMap;
- }
-
- /**
- * @param namespaceMap The namespaceMap to set.
- */
- public void setNamespaceMap(Map<String, String> namespaceMap) {
- // make some checks. This is a map from namespace to prefix, but we
want unique prefixes.
- if (namespaceMap != null) {
- Set<String> prefixesSoFar = new HashSet<String>();
- for (Map.Entry<String, String> mapping : namespaceMap.entrySet()) {
- if (prefixesSoFar.contains(mapping.getValue())) {
- throw new IllegalArgumentException("Duplicate prefix " +
mapping.getValue());
- }
- }
- }
- this.namespaceMap = namespaceMap;
- }
-
- /**
- * Provide explicit mappings to ReflectionServiceFactory.
- * [EMAIL PROTECTED]
- * */
- public Map<String, String> getDeclaredNamespaceMappings() {
- return this.namespaceMap;
}
/**
Modified:
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
(original)
+++
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
Fri Nov 30 11:29:15 2007
@@ -57,6 +57,7 @@
import org.apache.cxf.Bus;
import org.apache.cxf.bus.CXFBusFactory;
import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.i18n.UncheckedException;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.endpoint.Client;
@@ -379,9 +380,8 @@
classPath.addFileset(fs);
}
} catch (URISyntaxException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ throw new UncheckedException(e);
+ }
}
}
}
Modified:
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
(original)
+++
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
Fri Nov 30 11:29:15 2007
@@ -52,6 +52,7 @@
import org.w3c.dom.Document;
import org.w3c.dom.Node;
+import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
import com.sun.xml.bind.v2.ContextFactory;
import com.sun.xml.bind.v2.runtime.JAXBContextImpl;
@@ -124,17 +125,46 @@
context = ctx;
}
+ private NamespacePrefixMapper getNamespacePrefixMapper() {
+ Map<String, String> mappings = getDeclaredNamespaceMappings();
+ if (mappings == null) {
+ mappings = Collections.emptyMap();
+ }
+
+ final Map<String, String> closedMappings = mappings;
+
+ NamespacePrefixMapper mapper = new NamespacePrefixMapper() {
+ @Override
+ public String getPreferredPrefix(String namespaceUri, String
suggestion, boolean requirePrefix) {
+ String prefix = closedMappings.get(namespaceUri);
+ if (prefix != null) {
+ return prefix;
+ }
+ return suggestion;
+ }
+ };
+ return mapper;
+ }
+
+
@SuppressWarnings("unchecked")
public <T> DataWriter<T> createWriter(Class<T> c) {
+ Map<String, Object> currentMarshallerProperties = new HashMap<String,
Object>();
+ if
(!marshallerProperties.containsKey("com.sun.xml.bind.namespacePrefixMapper")) {
+
currentMarshallerProperties.put("com.sun.xml.bind.namespacePrefixMapper",
+ getNamespacePrefixMapper());
+ }
+ currentMarshallerProperties.putAll(marshallerProperties);
if (c == XMLStreamWriter.class) {
- return (DataWriter<T>)new DataWriterImpl<XMLStreamWriter>(context,
marshallerProperties);
+ return (DataWriter<T>)new DataWriterImpl<XMLStreamWriter>(context,
currentMarshallerProperties);
} else if (c == OutputStream.class) {
- return (DataWriter<T>)new DataWriterImpl<OutputStream>(context,
marshallerProperties);
+ return (DataWriter<T>)new DataWriterImpl<OutputStream>(context,
+ currentMarshallerProperties);
} else if (c == XMLEventWriter.class) {
return (DataWriter<T>)new DataWriterImpl<XMLEventWriter>(context,
-
marshallerProperties);
+
currentMarshallerProperties);
} else if (c == Node.class) {
- return (DataWriter<T>)new DataWriterImpl<Node>(context,
marshallerProperties);
+ return (DataWriter<T>)new DataWriterImpl<Node>(context,
currentMarshallerProperties);
}
return null;
@@ -427,14 +457,6 @@
}
return added;
- }
-
- /**
- * Jaxb has no declared namespace prefixes.
- * [EMAIL PROTECTED]
- */
- public Map<String, String> getDeclaredNamespaceMappings() {
- return null;
}
/**
Modified:
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
(original)
+++
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
Fri Nov 30 11:29:15 2007
@@ -52,6 +52,7 @@
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.jaxb.fortest.QualifiedBean;
import org.apache.cxf.jaxb.fortest.unqualified.UnqualifiedBean;
import org.apache.cxf.jaxb.io.DataReaderImpl;
import org.apache.cxf.jaxb.io.DataWriterImpl;
@@ -220,4 +221,27 @@
assertTrue(xml.contains("uri:ultima:thule"));
}
+ @Test
+ public void testDeclaredNamespaceMapping() throws Exception {
+ JAXBDataBinding db = new JAXBDataBinding();
+ Map<String, String> nsMap = new HashMap<String, String>();
+ nsMap.put("uri:ultima:thule", "greenland");
+ db.setNamespaceMap(nsMap);
+ Map<String, Object> contextProperties = new HashMap<String, Object>();
+ contextProperties.put(JAXBRIContext.DEFAULT_NAMESPACE_REMAP,
"uri:ultima:thule");
+ db.setContextProperties(contextProperties);
+ Set<Class<?>> classes = new HashSet<Class<?>>();
+ classes.add(QualifiedBean.class);
+ db.setContext(db.createJAXBContext(classes));
+ DataWriter<XMLStreamWriter> writer =
db.createWriter(XMLStreamWriter.class);
+ XMLOutputFactory writerFactory = XMLOutputFactory.newInstance();
+ StringWriter stringWriter = new StringWriter();
+ XMLStreamWriter xmlWriter =
writerFactory.createXMLStreamWriter(stringWriter);
+ QualifiedBean bean = new QualifiedBean();
+ bean.setAriadne("spider");
+ writer.write(bean, xmlWriter);
+ xmlWriter.flush();
+ String xml = stringWriter.toString();
+ assertTrue(xml.contains("greenland=\"uri:ultima:thule"));
+ }
}
Modified:
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
(original)
+++
incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
Fri Nov 30 11:29:15 2007
@@ -221,7 +221,7 @@
// so that it could be examined inside the debugger to see how JAXB
works.
assertTrue(xmlResult.contains("Gallia:string2"));
}
-
+
@Test
public void testMarshallIntoStax() throws Exception {
GreetMe obj = new GreetMe();
Modified:
incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
(original)
+++
incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
Fri Nov 30 11:29:15 2007
@@ -18,6 +18,8 @@
*/
package org.apache.cxf.jaxws.spring;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.List;
import javax.xml.namespace.QName;
@@ -25,6 +27,8 @@
import junit.framework.Assert;
import org.apache.cxf.BusFactory;
+import org.apache.cxf.anonymous_complex_type.AnonymousComplexType;
+import org.apache.cxf.anonymous_complex_type.SplitNameResponse.Names;
import org.apache.cxf.binding.BindingConfiguration;
import org.apache.cxf.binding.soap.Soap12;
import org.apache.cxf.binding.soap.SoapBindingConfiguration;
@@ -44,6 +48,7 @@
import org.apache.hello_world_soap_http.Greeter;
import org.junit.After;
import org.junit.Test;
+import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringBeansTest extends Assert {
@@ -55,7 +60,6 @@
}
}
-
@Test
public void testEndpoints() throws Exception {
ClassPathXmlApplicationContext ctx =
@@ -154,9 +158,23 @@
assertTrue("Could not find server factory with autogenerated id",
found);
testInterceptors(ctx);
-
}
+ private void testNamespaceMapping(ApplicationContext ctx) throws Exception
{
+ AnonymousComplexType act = (AnonymousComplexType)
ctx.getBean("bookClient");
+ Client client = ClientProxy.getClient(act);
+ assertNotNull(act);
+
+ StringWriter logWriter = new StringWriter();
+ PrintWriter writer = new PrintWriter(logWriter);
+ LoggingInInterceptor spy = new LoggingInInterceptor(writer);
+ client.getInInterceptors().add(spy);
+ Names n = act.splitName("Hello There");
+ assertEquals("Hello", n.getFirst());
+ assertTrue(logWriter.toString().contains("BeepBeep:"));
+ }
+
+
private void testInterceptors(ClassPathXmlApplicationContext ctx) {
EndpointImpl ep;
ep = (EndpointImpl) ctx.getBean("epWithInterceptors");
@@ -212,6 +230,7 @@
}
}
assertTrue("Could not find server factory with autogenerated id",
found);
+ testNamespaceMapping(ctx);
}
Modified:
incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
(original)
+++
incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
Fri Nov 30 11:29:15 2007
@@ -67,9 +67,40 @@
</constructor-arg>
</bean>
</jaxws:invoker>
-
+ <jaxws:dataBinding>
+ <bean class="org.apache.cxf.jaxb.JAXBDataBinding"/>
+ </jaxws:dataBinding>
</jaxws:server>
-
+
+ <jaxws:server id="bookServer"
+
serviceClass="org.apache.cxf.anonymous_complex_type.AnonymousComplexTypeImpl"
+ address="http://localhost:8080/act"
+ bus="cxf">
+ <jaxws:invoker>
+ <bean class="org.apache.cxf.service.invoker.BeanInvoker">
+ <constructor-arg>
+ <bean
class="org.apache.cxf.anonymous_complex_type.AnonymousComplexTypeImpl"/>
+ </constructor-arg>
+ </bean>
+ </jaxws:invoker>
+ <jaxws:dataBinding>
+ <bean class="org.apache.cxf.jaxb.JAXBDataBinding">
+ <property name="namespaceMap">
+ <map>
+ <entry>
+
<key><value>http://cxf.apache.org/anonymous_complex_type/</value></key>
+ <value>BeepBeep</value>
+ </entry>
+ </map>
+ </property>
+ </bean>
+ </jaxws:dataBinding>
+ </jaxws:server>
+
+ <jaxws:client id="bookClient"
+ serviceClass="org.apache.cxf.anonymous_complex_type.AnonymousComplexType"
+ address="http://localhost:8080/act"/>
+
<jaxws:server id="inlineSoapBinding"
serviceClass="org.apache.cxf.jaxws.service.Hello"
address="http://localhost:8080/test">
Modified:
incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
---
incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java
(original)
+++
incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java
Fri Nov 30 11:29:15 2007
@@ -26,6 +26,7 @@
import javax.annotation.Resource;
+import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.BindingProvider;
@@ -131,6 +132,7 @@
return "How are you " + me;
}
+ @WebMethod
public BareDocumentResponse testDocLitBare(String in) {
invocationCount++;
BareDocumentResponse res = new BareDocumentResponse();