Hi
this method
protected void marshalToWriter(Marshaller ms, Object obj,
XMLStreamWriter writer, MediaType mt) throws Exception {
}
assumes that the writer has already been created so this method is not
called at the moment. Custom providers can also extend this method and wrap
the writer with yet another writer as you do, but in your specific case you
need to register a writer using a response filter, here's an example :
http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/XmlStreamWriterProvider.java
you can register this filter the same way as the custom JAXB provider.
Given that you've actually extended the JAXBProvider, it seems like an extra
step to go and also create a filter. So I've updated the JAXB provider
(locally only) with
protected XMLStreamWriter getStreamWriter(Object obj, OutputStream os,
MediaType mt) {}
(and a similar method for XMLStreamReader)
so, starting with 2.2.3 you'll be able to avoid registering a filter just
for the sake of providing a writer to the JAXB provider :
public class MyCustomJAXBElementProvider extends JAXBElementProvider {
@Override
protected XMLStreamWriter getStreamWriter(Object obj, OutputStream os,
MediaType mt) {
XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(os);
//return new CachingXmlEventWriterWrapper(writer);
}
}
Note explicitly registered CachingXmlEventWriters are not supported yet
(assuming they just cache the XMLEvents), unless you enable a buffering
mode. I'll fix it too, but in meantime you might want to use a delegating
writer instead similar to
http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/CustomXmlStreamWriter.java
hope it helps, Sergey
Juan José Vázquez Delgado wrote:
>
> Hi,
>
> I have a JAX-RS web service which uses JAXB for binding. Everything is
> ok, but currently I have a Flash client which is not ready to
> understand neither namespaces nor prefixes at all. I have to clean the
> output XML of namespaces and prefixes, included xmlns attributes, but
> I would´nt like having to modify my xml schemas so I´m looking for a
> solution on binding time.
>
> My approach has been to extend JAXBElementProvider in order to wrap
> the default XMLStreamWriter, CachingXmlEventWriter in this case. So I
> have something like this:
>
> public class MyCustomJAXBElementProvider extends JAXBElementProvider {
>
> @Override
> protected void marshalToWriter(Marshaller ms, Object obj,
> XMLStreamWriter writer, MediaType mt) throws Exception {
> CachingXmlEventWriterWrapper wrappedWriter = new
> CachingXmlEventWriterWrapper(writer);
> super.marshalToWriter(ms, obj, wrappedWriter, mt);
> }
>
> }
>
> class CachingXmlEventWriterWrapper implements XMLStreamWriter {
>
> private XMLStreamWriter wrappedStreamWriter;
>
> public CachingXmlEventWriterWrapper(XMLStreamWriter
> wrappedStreamWriter) {
> this.wrappedStreamWriter = wrappedStreamWriter;
>
> }
>
> ............
>
> }
>
> The wrapper implementation tries to generate a "clean" XML
> overwritting "setPrefix", "writeEmptyElement" and others methods but
> I didn´t get to remove the "xmlns" attributes. Any ideas?.
>
> Thanks in advance.
>
> Regards,
>
> Juanjo.
>
>
--
View this message in context:
http://www.nabble.com/Removing-XML-namespaces-and-prefixes-tp24457677p24458686.html
Sent from the cxf-user mailing list archive at Nabble.com.