You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2011/12/04 15:15:28 UTC
svn commit: r1210114 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
Author: sergeyb
Date: Sun Dec 4 14:15:28 2011
New Revision: 1210114
URL: http://svn.apache.org/viewvc?rev=1210114&view=rev
Log:
[CXF-3950] Adding basic processing of href attributes if any
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=1210114&r1=1210113&r2=1210114&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Sun Dec 4 14:15:28 2011
@@ -348,11 +348,7 @@ public class JAXBElementProvider extends
protected static void setNamespaceMapper(Marshaller ms, Map<String, String> map) throws Exception {
NamespaceMapper nsMapper = new NamespaceMapper(map);
- try {
- ms.setProperty("com.sun.xml.bind.namespacePrefixMapper", nsMapper);
- } catch (PropertyException ex) {
- ms.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", nsMapper);
- }
+ setMarshallerProp(ms, nsMapper, "namespacePrefixMapper");
}
protected void marshal(Object obj, Class<?> cls, Type genericType,
@@ -381,16 +377,26 @@ public class JAXBElementProvider extends
XMLInstruction pi = AnnotationUtils.getAnnotation(anns, XMLInstruction.class);
if (pi != null) {
String value = pi.value();
- // Should we even consider adding a base URI here ?
- // Relative references may be resolved OK, to be verified
- try {
- ms.setProperty("com.sun.xml.bind.xmlHeaders", value);
- } catch (PropertyException ex) {
- ms.setProperty("com.sun.xml.internal.bind.xmlHeaders", value);
+ int ind = value.indexOf("href='");
+ if (ind > 0 && getContext() != null) {
+ String relRef = value.substring(ind + 6, value.length() - 3);
+ String absRef =
+ getContext().getUriInfo().getBaseUriBuilder().path(relRef).build().toString();
+ value = value.substring(0, ind + 6) + absRef + "'?>";
}
+ setMarshallerProp(ms, value, "xmlHeaders");
}
}
+ private static void setMarshallerProp(Marshaller ms, Object value, String name) throws Exception {
+ try {
+ ms.setProperty("com.sun.xml.bind." + name, value);
+ } catch (PropertyException ex) {
+ ms.setProperty("com.sun.xml.internal.bind." + name, value);
+ }
+
+ }
+
protected void addAttachmentMarshaller(Marshaller ms) {
Collection<Attachment> attachments = getAttachments(true);
if (attachments != null) {
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=1210114&r1=1210113&r2=1210114&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Sun Dec 4 14:15:28 2011
@@ -135,15 +135,14 @@ public class JAXRSClientServerBookTest e
@Test
public void testProcessingInstruction() throws Exception {
-
- String endpointAddress =
- "http://localhost:" + PORT + "/bookstore/name-in-query";
+ String base = "http://localhost:" + PORT;
+ String endpointAddress = base + "/bookstore/name-in-query";
WebClient wc = WebClient.create(endpointAddress);
String name = "Many spaces";
wc.query("name", name);
String content = wc.get(String.class);
assertTrue(content.contains("<!DOCTYPE Something SYSTEM 'my.dtd'>"));
- assertTrue(content.contains("<?xmlstylesheet href='common.css'?>"));
+ assertTrue(content.contains("<?xmlstylesheet href='" + base + "/common.css'?>"));
}
@Test