@Override protected XMLStreamReader createStreamReader(AegisType typeToRead, InputStream is) throws Exception { // the namespace map. Oh, the namespace map. // This is wrong, but might make unit tests pass until we redesign. if (typeToRead != null) { namespaceMap.putIfAbsent(typeToRead.getSchemaType().getNamespaceURI(), "ns1"); } return JSONUtils.createStreamReader(is, readXsiType, namespaceMap); }
@Override public void writeTo( T obj, Class<?> type, Type genericType, Annotation[] anns, MediaType m, MultivaluedMap<String, Object> headers, OutputStream os) throws IOException { if (type == null) { type = obj.getClass(); } if (genericType == null) { genericType = type; } AegisContext context = getAegisContext(type, genericType); AegisType aegisType = context.getTypeMapping().getType(genericType); AegisWriter<XMLStreamWriter> aegisWriter = context.createXMLStreamWriter(); try { W3CDOMStreamWriter w3cStreamWriter = new W3CDOMStreamWriter(); XMLStreamWriter spyingWriter = new PrefixCollectingXMLStreamWriter(w3cStreamWriter, namespaceMap); spyingWriter.writeStartDocument(); // use type qname as element qname? aegisWriter.write(obj, aegisType.getSchemaType(), false, spyingWriter, aegisType); spyingWriter.writeEndDocument(); spyingWriter.close(); Document dom = w3cStreamWriter.getDocument(); // ok, now the namespace map has all the prefixes. XMLStreamWriter xmlStreamWriter = createStreamWriter(aegisType.getSchemaType(), os); xmlStreamWriter.writeStartDocument(); StaxUtils.copy(dom, xmlStreamWriter); // Jettison needs, and StaxUtils.copy doesn't do it. xmlStreamWriter.writeEndDocument(); xmlStreamWriter.flush(); xmlStreamWriter.close(); } catch (Exception e) { throw new WebApplicationException(e); } }