Ejemplo n.º 1
0
  public void marshal(Object obj, Result result) throws JAXBException {
    // XMLSerializable so = Util.toXMLSerializable(obj);
    XMLSerializable so = context.getGrammarInfo().castToXMLSerializable(obj);

    if (so == null) throw new MarshalException(Messages.format(Messages.NOT_MARSHALLABLE));

    if (result instanceof SAXResult) {
      write(so, ((SAXResult) result).getHandler());
      return;
    }
    if (result instanceof DOMResult) {
      Node node = ((DOMResult) result).getNode();

      if (node == null) {
        try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          dbf.setNamespaceAware(true);
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document doc = db.newDocument();
          ((DOMResult) result).setNode(doc);
          write(so, new SAX2DOMEx(doc));
        } catch (ParserConfigurationException pce) {
          throw new JAXBAssertionError(pce);
        }
      } else {
        write(so, new SAX2DOMEx(node));
      }

      return;
    }
    if (result instanceof StreamResult) {
      StreamResult sr = (StreamResult) result;
      XMLWriter w = null;

      if (sr.getWriter() != null) w = createWriter(sr.getWriter());
      else if (sr.getOutputStream() != null) w = createWriter(sr.getOutputStream());
      else if (sr.getSystemId() != null) {
        String fileURL = sr.getSystemId();

        if (fileURL.startsWith("file:///")) {
          if (fileURL.substring(8).indexOf(":") > 0) fileURL = fileURL.substring(8);
          else fileURL = fileURL.substring(7);
        } // otherwise assume that it's a file name

        try {
          w = createWriter(new FileOutputStream(fileURL));
        } catch (IOException e) {
          throw new MarshalException(e);
        }
      }

      if (w == null) throw new IllegalArgumentException();

      write(so, w);
      return;
    }

    // unsupported parameter type
    throw new MarshalException(Messages.format(Messages.UNSUPPORTED_RESULT));
  }
Ejemplo n.º 2
0
 public XMLWriter createWriter(OutputStream os, String encoding) throws JAXBException {
   try {
     return createWriter(new OutputStreamWriter(os, getJavaEncoding(encoding)), encoding);
   } catch (UnsupportedEncodingException e) {
     throw new MarshalException(Messages.format(Messages.UNSUPPORTED_ENCODING, encoding), e);
   }
 }
Ejemplo n.º 3
0
 public String onIDREF(IdentifiableObject obj) throws SAXException {
   idReferencedObjects.add(obj);
   String id = obj.____jaxb____getId();
   if (id == null) {
     reportError(
         new NotIdentifiableEventImpl(
             ValidationEvent.ERROR,
             Messages.format(Messages.ERR_NOT_IDENTIFIABLE),
             new ValidationEventLocatorImpl(obj)));
   }
   return id;
 }
Ejemplo n.º 4
0
  void reconcileID() throws AbortSerializationException {
    // find objects that were not a part of the object graph
    idReferencedObjects.removeAll(objectsWithId);

    for (Iterator itr = idReferencedObjects.iterator(); itr.hasNext(); ) {
      IdentifiableObject o = (IdentifiableObject) itr.next();
      reportError(
          new NotIdentifiableEventImpl(
              ValidationEvent.ERROR,
              Messages.format(Messages.ERR_DANGLING_IDREF, o.____jaxb____getId()),
              new ValidationEventLocatorImpl(o)));
    }

    // clear the garbage
    idReferencedObjects.clear();
    objectsWithId.clear();
  }