org.w3c.dom.Document#getChildNodes ( )源码实例Demo

下面列出了org.w3c.dom.Document#getChildNodes ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: TencentKona-8   文件: DOMDocumentSerializer.java
/**
 * Serialize a {@link Document}.
 *
 * @param d the document to serialize.
 */
public final void serialize(Document d) throws IOException {
    reset();
    encodeHeader(false);
    encodeInitialVocabulary();

    final NodeList nl = d.getChildNodes();
    for (int i = 0; i < nl.getLength(); i++) {
        final Node n = nl.item(i);
        switch (n.getNodeType()) {
            case Node.ELEMENT_NODE:
                serializeElement(n);
                break;
            case Node.COMMENT_NODE:
                serializeComment(n);
                break;
            case Node.PROCESSING_INSTRUCTION_NODE:
                serializeProcessingInstruction(n);
                break;
        }
    }
    encodeDocumentTermination();
}
 
源代码2 项目: jdk8u60   文件: DOMDocumentSerializer.java
/**
 * Serialize a {@link Document}.
 *
 * @param d the document to serialize.
 */
public final void serialize(Document d) throws IOException {
    reset();
    encodeHeader(false);
    encodeInitialVocabulary();

    final NodeList nl = d.getChildNodes();
    for (int i = 0; i < nl.getLength(); i++) {
        final Node n = nl.item(i);
        switch (n.getNodeType()) {
            case Node.ELEMENT_NODE:
                serializeElement(n);
                break;
            case Node.COMMENT_NODE:
                serializeComment(n);
                break;
            case Node.PROCESSING_INSTRUCTION_NODE:
                serializeProcessingInstruction(n);
                break;
        }
    }
    encodeDocumentTermination();
}
 
源代码3 项目: icafe   文件: XMP.java
/**
 * Merge the standard XMP and the extended XMP DOM
 * <p>
 * This is a very expensive operation, avoid if possible
 * 
 * @return a merged Document for the entire XMP data with the GUID from the standard XMP document removed
 */
public Document getMergedDocument() {
	if(mergedXmpDocument != null)
		return mergedXmpDocument;
	else if(getExtendedXmpDocument() != null) { // Merge document
		mergedXmpDocument = XMLUtils.createDocumentNode();
		Document rootDoc = getXmpDocument();
		NodeList children = rootDoc.getChildNodes();
		for(int i = 0; i< children.getLength(); i++) {
			Node importedNode = mergedXmpDocument.importNode(children.item(i), true);
			mergedXmpDocument.appendChild(importedNode);
		}
		// Remove GUID from the standard XMP
		XMLUtils.removeAttribute(mergedXmpDocument, "rdf:Description", "xmpNote:HasExtendedXMP");
		// Copy all the children of rdf:RDF element
		NodeList list = extendedXmpDocument.getElementsByTagName("rdf:RDF").item(0).getChildNodes();
		Element rdf = (Element)(mergedXmpDocument.getElementsByTagName("rdf:RDF").item(0));
	  	for(int i = 0; i < list.getLength(); i++) {
    		Node curr = list.item(i);
    		Node newNode = mergedXmpDocument.importNode(curr, true);
   			rdf.appendChild(newNode);
    	}
    	return mergedXmpDocument;
	} else
		return getXmpDocument();
}
 
源代码4 项目: openjdk-jdk8u   文件: DOMDocumentSerializer.java
/**
 * Serialize a {@link Document}.
 *
 * @param d the document to serialize.
 */
public final void serialize(Document d) throws IOException {
    reset();
    encodeHeader(false);
    encodeInitialVocabulary();

    final NodeList nl = d.getChildNodes();
    for (int i = 0; i < nl.getLength(); i++) {
        final Node n = nl.item(i);
        switch (n.getNodeType()) {
            case Node.ELEMENT_NODE:
                serializeElement(n);
                break;
            case Node.COMMENT_NODE:
                serializeComment(n);
                break;
            case Node.PROCESSING_INSTRUCTION_NODE:
                serializeProcessingInstruction(n);
                break;
        }
    }
    encodeDocumentTermination();
}
 
源代码5 项目: openjdk-jdk9   文件: DOMDocumentSerializer.java
/**
 * Serialize a {@link Document}.
 *
 * @param d the document to serialize.
 */
public final void serialize(Document d) throws IOException {
    reset();
    encodeHeader(false);
    encodeInitialVocabulary();

    final NodeList nl = d.getChildNodes();
    for (int i = 0; i < nl.getLength(); i++) {
        final Node n = nl.item(i);
        switch (n.getNodeType()) {
            case Node.ELEMENT_NODE:
                serializeElement(n);
                break;
            case Node.COMMENT_NODE:
                serializeComment(n);
                break;
            case Node.PROCESSING_INSTRUCTION_NODE:
                serializeProcessingInstruction(n);
                break;
        }
    }
    encodeDocumentTermination();
}
 
@Test
public void testParent() throws IOException {
    List<ExpandedTree> trees = Utils.decodeTreeData(
            new File(testData + System.getProperty("file.separator")
            		+ forest, stand), false);
        assertEquals(num, trees.size());

    StringBuilder expected = new StringBuilder();
    StringBuilder actual = new StringBuilder();
    for (int i = 0; i < trees.size(); i++) {
        ExpandedTree t = trees.get(i);
        String uri = t.getDocumentURI();
        
        Document doc = Utils.readXMLasDOMDocument(new File(testData, uri));
    	if (doc == null) continue;
    	expected.append(uri);
        NodeList children = doc.getChildNodes();
        walkDOMParent(children, expected);
        Document d = (Document) new DocumentImpl(t, 0).cloneNode(true);
        NodeList eChildren = d.getChildNodes();
        actual.append(uri);
        walkDOMParent (eChildren, actual);
        
        expected.append("\n");
        actual.append("\n");
    }
    if (LOG.isDebugEnabled()) {
        LOG.debug(expected.toString());
        LOG.debug(actual.toString());
    }
    assertEquals(expected.toString(), actual.toString());
}
 
源代码7 项目: Box   文件: ManifestAttributes.java
private void parse(Document doc) {
	NodeList nodeList = doc.getChildNodes();
	for (int count = 0; count < nodeList.getLength(); count++) {
		Node node = nodeList.item(count);
		if (node.getNodeType() == Node.ELEMENT_NODE
				&& node.hasChildNodes()) {
			parseAttrList(node.getChildNodes());
		}
	}
}
 
源代码8 项目: OpenEstate-IO   文件: XmlUtils.java
/**
 * Print nodes of a {@link Document} recursively to the local logger.
 *
 * @param doc the document to print
 */
public static void printNodes(Document doc) {
    NodeList children = doc.getChildNodes();
    for (int i = 0; i < children.getLength(); i++) {
        Node node = children.item(i);
        if (node instanceof Element) printNode((Element) node);
    }
}
 
源代码9 项目: Quelea   文件: OpensongParser.java
@Override
public List<SongDisplayable> getSongs(File location, StatusPanel statusPanel) throws IOException {
    try (ZipFile file = new ZipFile(location, Charset.forName("Cp437"))) {
        List<SongDisplayable> ret = new ArrayList<>();
        final Enumeration<? extends ZipEntry> entries = file.entries();
        while (entries.hasMoreElements()) {
            String fileName = null;
            try {
                final ZipEntry entry = entries.nextElement();
                fileName = entry.getName();
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(new InputSource(new UnicodeReader(file.getInputStream(entry), "UTF-8")));
                NodeList list = doc.getChildNodes();
                for (int i = 0; i < list.getLength(); i++) {
                    if (list.item(i).getNodeName().equalsIgnoreCase("song")) {
                        SongDisplayable displayable = getDisplayable(list.item(i));
                        if (displayable != null) {
                            ret.add(displayable);
                        }
                    }
                }
            } catch (IOException | ParserConfigurationException | SAXException ex) {
                LOGGER.log(Level.WARNING, "Error importing opensong: " + fileName, ex);
            }
        }
        return ret;
    }
}
 
@Test
public void testAttributeNode() throws IOException {
    List<ExpandedTree> trees = Utils.decodeTreeData(
            new File(testData + System.getProperty("file.separator")
            		+ forest, stand), false);
        assertEquals(num, trees.size());

    StringBuilder expected = new StringBuilder();
    StringBuilder actual = new StringBuilder();
    for (int i = 0; i < trees.size(); i++) {
        ExpandedTree t = trees.get(i);
        String uri = t.getDocumentURI();
        Document doc = Utils.readXMLasDOMDocument(new File(testData, uri));
        if (doc == null) continue;
        expected.append(uri);
        NodeList children = doc.getChildNodes();
        walkDOMElem(children, expected);
        Document d = (Document) new DocumentImpl(t, 0).cloneNode(true);
        NodeList eChildren = d.getChildNodes();
        actual.append(uri);
        walkDOMElem(eChildren, actual);
        
        expected.append("\n");
        actual.append("\n");
    }
    if (LOG.isDebugEnabled()) {
        LOG.debug(expected.toString());
        LOG.debug(actual.toString());
    }
    assertEquals(expected.toString(), actual.toString());
}
 
源代码11 项目: OpenEstate-IO   文件: XmlUtils.java
/**
 * Replace all text values of a {@link Document} with CDATA values.
 *
 * @param doc the document to update
 */
public static void replaceTextWithCData(Document doc) {
    NodeList children = doc.getChildNodes();
    for (int i = 0; i < children.getLength(); i++) {
        XmlUtils.replaceTextWithCData(doc, children.item(i));
    }
}
 
源代码12 项目: Rails   文件: XmlUtils.java
/**
 * Opens and parses an xml file. Searches the root level of the file for an
 * element with the supplied name.
 *
 * @param fileName the name of the file to open
 * @param elementName the name of the element to find
 * @return the named element in the named file
 * @throws ConfigurationException if there is any problem opening and
 * parsing the file, or if the file does not contain a top level element
 * with the given name.
 */
public static Element findElementInFile(String fileName, String elementName)
        throws ConfigurationException {
    Document doc = null;
    try {
        // Step 1: create a DocumentBuilderFactory and setNamespaceAware
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(true);
        dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

        // Step 2: create a DocumentBuilder
        DocumentBuilder db = dbf.newDocumentBuilder();

        // Step 3: parse the input file to get a Document object
        doc = db.parse(net.sf.rails.util.Util.getStreamForFile(fileName));

    } catch (ParserConfigurationException | SAXException | IOException e) {
        throw new ConfigurationException("Could not read/parse " + fileName
                                         + " to find element "
                                         + elementName, e);
    }

    if (doc == null) {
        throw new ConfigurationException("Cannot find file " + fileName);
    }

    // Now find the named Element
    NodeList nodeList = doc.getChildNodes();
    for (int iNode = 0; (iNode < nodeList.getLength()); iNode++) {
        Node childNode = nodeList.item(iNode);
        if ((childNode != null)
            && (childNode.getNodeName().equals(elementName))
            && (childNode.getNodeType() == Node.ELEMENT_NODE)) {
            return (Element) childNode;
        }
    }
    throw new ConfigurationException("Could not find " + elementName
                                     + " in " + fileName);
}
 
源代码13 项目: lams   文件: JTidyHTMLParser.java
public void parse( URL pageURL, String pageText, DocumentAdapter adapter ) throws IOException, SAXException {
    try {
        Document jtidyDocument = getParser( pageURL ).parseDOM( new ByteArrayInputStream( pageText.getBytes( UTF_ENCODING ) ), null );
        HTMLDocument htmlDocument = new HTMLDocumentImpl();
        NodeList nl = jtidyDocument.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++) {
            Node importedNode = nl.item(i);
            if (importedNode.getNodeType() != Node.DOCUMENT_TYPE_NODE) htmlDocument.appendChild( htmlDocument.importNode( importedNode, true ) );
        }
        adapter.setDocument( htmlDocument );
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException( "UTF-8 encoding failed" );
    }
}
 
源代码14 项目: marklogic-contentpump   文件: TestDocumentImpl.java
@Test
public void testPreviousSibling() throws IOException {
    List<ExpandedTree> trees = Utils.decodeTreeData(
        new File(testData + System.getProperty("file.separator")
        		+ forest, stand), false);
    assertEquals(num, trees.size());

    StringBuilder expected = new StringBuilder();
    StringBuilder actual = new StringBuilder();
    for (int i = 0; i < trees.size(); i++) {
        ExpandedTree t = trees.get(i);
        String uri = t.getDocumentURI();
        if (uri.equals("hc_staff.xml"))
            continue;
        Document doc = Utils.readXMLasDOMDocument(new File(testData, uri));
    	if (doc == null) continue;
    	expected.append(uri);
        NodeList children = doc.getChildNodes();
        walkDOMPreviousSibling(children, expected);
        DocumentImpl d = new DocumentImpl(t, 0);
        NodeList eChildren = d.getChildNodes();
        actual.append(uri);
        walkDOMPreviousSibling (eChildren, actual);
        
        expected.append("\n");
        actual.append("\n");
    }
    if (LOG.isDebugEnabled()) {
        LOG.debug(expected.toString());
        LOG.debug(actual.toString());
    }
    assertEquals(expected.toString(), actual.toString());
}
 
private static void print(Document doc) {
    NodeList nodeList = doc.getChildNodes();
    for(int i=0 ; i<nodeList.getLength() ;i++ ) {
        Node n = nodeList.item(i);
        System.out.println(n.getTextContent());
    }
}
 
@Test
public void testAttributes() throws IOException {
    List<ExpandedTree> trees = Utils.decodeTreeData(
            new File(testData + System.getProperty("file.separator")
            		+ forest, stand), false);
        assertEquals(num, trees.size());

    Set<String> expectedAttrSet = new HashSet<String>();
    Set<String> actualAttrSet = new HashSet<String>();
    for (int i = 0; i < trees.size(); i++) {
        ExpandedTree t = trees.get(i);
        String uri = t.getDocumentURI();
        expectedAttrSet.add(uri);
        actualAttrSet.add(uri);
        Document doc = Utils.readXMLasDOMDocument(new File(testData, uri));
    	if (doc == null) continue;
        NodeList children = doc.getChildNodes();
        walkDOMAttr(children, expectedAttrSet);
        Document d = (Document) new DocumentImpl(t, 0).cloneNode(true);
        NodeList eChildren = d.getChildNodes();
        walkDOMAttr (eChildren, actualAttrSet);
    }
    for(String s : expectedAttrSet) {
        if(actualAttrSet.contains(s) == false && expectedMissingNSDecl.contains(s) == false) {
            if (LOG.isDebugEnabled()) 
                LOG.debug("NOT_FOUND:" + s);
            assertTrue(actualAttrSet.contains(s));
        }
    }

}
 
源代码17 项目: XACML   文件: JaxpResponse.java
/**
 * Creates a new <code>JaxpResponse</code> by loading it from an XML <code>File</code>.
 * 
 * @param fileXmlResponse the <code>File</code> containing the Response XML
 * @return a new <code>JaxpResponse</code> generated by parsing the given XML file 
 * @throws ParserConfigurationException
 * @throws IOException
 * @throws SAXException
 * @throws JAXBException
 */
public static JaxpResponse load(File fileXmlResponse) throws ParserConfigurationException, IOException, SAXException, JAXBException {
	if (fileXmlResponse == null) {
		throw new NullPointerException("Null File");
	}
	
   	/*
   	 * Create XML document factory and builder
   	 */
	DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
       documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
    documentBuilderFactory.setNamespaceAware(true);
	DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
	
	/*
	 * Parse the file into a Document
	 */
	Document	document	= documentBuilder.parse(fileXmlResponse);
	if (document == null) {
		logger.error("No Document returned parsing {}", fileXmlResponse.getAbsolutePath());
		return null;
	}
	
	NodeList	nodeListRoot	= document.getChildNodes();
	if (nodeListRoot == null || nodeListRoot.getLength() == 0) {
		logger.warn("No child elements of the XML document");
		return null;
	}
	Node		nodeRoot		= nodeListRoot.item(0);
	if (nodeRoot == null || nodeRoot.getNodeType() != Node.ELEMENT_NODE) {
		logger.warn("Root of the document is not an ELEMENT");
		return null;
	}
	
	JAXBContext 				context 			= JAXBContext.newInstance(ResponseType.class);
	Unmarshaller 				unmarshaller 		= context.createUnmarshaller();
	JAXBElement<ResponseType>	jaxbElementResponse = unmarshaller.unmarshal((Element)nodeRoot, ResponseType.class);
	if (jaxbElementResponse == null || jaxbElementResponse.getValue() == null) {
		logger.error("JAXB unmarshalling did not return a ResponseType node");
		return null;
	}
	return JaxpResponse.newInstance(jaxbElementResponse.getValue());
	
}
 
源代码18 项目: sailfish-core   文件: FixUtil.java
public static void parseXmlFields(String content, IMessage xmlMessage, IDictionaryStructure dictionary,
                                  IFieldStructure messageStructure, DocumentBuilderFactory documentFactory,
                                  boolean parseFieldsByDictionary)
        throws IOException, SAXException, ParserConfigurationException, MessageConvertException {

    DocumentBuilder docBuilder = documentFactory.newDocumentBuilder();
    Document document = docBuilder.parse(new InputSource(new StringReader(content)));

    NodeList list = document.getChildNodes();

    for (int i = 0; i < list.getLength(); i++) {
        NodeList insideList = list.item(i).getChildNodes();

        for (int j = 0; j < insideList.getLength(); j++) {
            if (!insideList.item(j).hasAttributes()) {
                continue;
            }

            Node nameNode = insideList.item(j).getAttributes().getNamedItem("name");
            Node valueNode = insideList.item(j).getAttributes().getNamedItem("value");

            String fieldName = nameNode.getNodeValue().replaceAll(" ", "");
            String fieldValue = valueNode.getNodeValue().trim();

            if (StringUtils.isNotEmpty(fieldName) && StringUtils.isNotEmpty(fieldValue)) {
                if (parseFieldsByDictionary) {

                    IFieldStructure fieldStructure = messageStructure.getFields().get(fieldName);
                    if (fieldStructure == null) {
                        fieldStructure = dictionary.getFields().get(fieldName);
                    }

                    if (fieldStructure != null && !fieldStructure.isComplex()) {
                        try {
                            switch (fieldStructure.getJavaType()) {
                                case JAVA_LANG_BOOLEAN:
                                    xmlMessage.addField(fieldName, BooleanConverter.convert(fieldValue));
                                    break;
                                case JAVA_LANG_CHARACTER:
                                    xmlMessage.addField(fieldName, fieldValue.charAt(0));
                                    break;
                                case JAVA_LANG_BYTE:
                                    xmlMessage.addField(fieldName, Byte.valueOf(fieldValue));
                                    break;
                                case JAVA_LANG_SHORT:
                                    xmlMessage.addField(fieldName, Short.valueOf(fieldValue));
                                    break;
                                case JAVA_LANG_INTEGER:
                                    xmlMessage.addField(fieldName, Integer.valueOf(fieldValue));
                                    break;
                                case JAVA_LANG_LONG:
                                    xmlMessage.addField(fieldName, Long.valueOf(fieldValue));
                                    break;
                                case JAVA_LANG_FLOAT:
                                    xmlMessage.addField(fieldName, Float.valueOf(fieldValue));
                                    break;
                                case JAVA_LANG_DOUBLE:
                                    xmlMessage.addField(fieldName, Double.valueOf(fieldValue));
                                    break;
                                case JAVA_MATH_BIG_DECIMAL:
                                    xmlMessage.addField(fieldName, new BigDecimal(fieldValue));
                                    break;
                                case JAVA_LANG_STRING:
                                    xmlMessage.addField(fieldName, fieldValue);
                                    break;
                                case JAVA_TIME_LOCAL_DATE_TIME:
                                    LocalDateTime dateTime = DateTimeUtility.toLocalDateTime(
                                            UtcTimestampConverter.convert(fieldValue));
                                    xmlMessage.addField(fieldName, dateTime);
                                    break;
                                case JAVA_TIME_LOCAL_TIME:
                                    LocalTime time = DateTimeUtility.toLocalTime(
                                            UtcTimeOnlyConverter.convert(fieldValue));
                                    xmlMessage.addField(fieldName, time);
                                    break;
                                case JAVA_TIME_LOCAL_DATE:
                                    LocalDate date = DateTimeUtility.toLocalDate(
                                            UtcDateOnlyConverter.convert(fieldValue));
                                    xmlMessage.addField(fieldName, date);
                                    break;
                                default:
                                    xmlMessage.addField(fieldName, fieldValue);
                                    break;
                            }
                        } catch (FieldException | FieldConvertError e) {
                            throw new MessageConvertException(
                                    String.format("Can not parse [%s] value for [%s] field", fieldName, fieldValue), "", e);
                        }
                    }
                } else {
                    xmlMessage.addField(fieldName, fieldValue);
                }
            }
        }
    }
}
 
源代码19 项目: icafe   文件: JpegXMP.java
public void write(OutputStream os) throws IOException {		
	Document xmpDoc = getXmpDocument();
	NodeList list = xmpDoc.getChildNodes();
	boolean foundPI = false;
       for (int j = 0; j < list.getLength(); j++) {
           Node currentNode = list.item(j);
           if (currentNode.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE && currentNode.getNodeName().equalsIgnoreCase("xpacket")) {
           	foundPI = true;
           	break;
           }            
       }
       if(!foundPI) {
       	// Add packet wrapper to the XMP document
   		// Add PI at the beginning and end of the document, we will support only UTF-8, no BOM
       	XMLUtils.insertLeadingPI(xmpDoc, "xpacket", "begin='?' id='W5M0MpCehiHzreSzNTczkc9d'");
   		XMLUtils.insertTrailingPI(xmpDoc, "xpacket", "end='r'");
       }
     	// Serialize XMP to byte array
	byte[] xmp = XMLUtils.serializeToByteArray(xmpDoc);
	if(xmp.length > MAX_XMP_CHUNK_SIZE) {
		Document extendedXMPDoc = XMLUtils.createDocumentNode();
		// Copy all the children of rdf:RDF element
  		Node xmpRDF = xmpDoc.getElementsByTagName("rdf:RDF").item(0);	  		 
		NodeList nodes = xmpRDF.getChildNodes();
		Element extendedRDF = extendedXMPDoc.createElement("rdf:RDF");
		extendedRDF.setAttribute("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
		extendedXMPDoc.appendChild(extendedRDF);
	  	for(int i = 0; i < nodes.getLength(); i++) {
	  		Node curr = extendedXMPDoc.importNode(nodes.item(i), true);
    		extendedRDF.appendChild(curr);
    	}
	  	int numOfItems = nodes.getLength();
	  	for(int i = 1; i <= numOfItems; i++) {
	  		xmpRDF.removeChild(nodes.item(numOfItems - i));
    	}		  	
	  	xmp = XMLUtils.serializeToByteArray(xmpDoc);
	  	setExtendedXMPData(XMLUtils.serializeToByteArray(extendedXMPDoc));
	}
	String guid = null;
	byte[] extendedXmp = getExtendedXmpData();	     
	if(extendedXmp != null) { // We have ExtendedXMP
		if(XMLUtils.getAttribute(xmpDoc, "rdf:Description", "xmpNote:HasExtendedXMP").length() == 0) {
			guid = StringUtils.generateMD5(extendedXmp);
			Element node = XMLUtils.createElement(xmpDoc, "rdf:Description");
			node.setAttribute("xmlns:xmpNote", "http://ns.adobe.com/xmp/extension/");
			node.setAttribute("xmpNote:HasExtendedXMP", guid);
			xmpDoc.getElementsByTagName("rdf:RDF").item(0).appendChild(node);
			xmp = XMLUtils.serializeToByteArray(xmpDoc);
		} else {
			guid = XMLUtils.getAttribute(xmpDoc, "rdf:Description", "xmpNote:HasExtendedXMP");
		}
	}	
	// Write XMP segment
	IOUtils.writeShortMM(os, Marker.APP1.getValue());
	// Write segment length
	IOUtils.writeShortMM(os, XMP_ID.length() + 2 + xmp.length);
	// Write segment data
	os.write(XMP_ID.getBytes());
	os.write(xmp);
	// Write ExtendedXMP if we have
	if(extendedXmp != null) { // We have ExtendedXMP
		int numOfChunks = extendedXmp.length / MAX_EXTENDED_XMP_CHUNK_SIZE;
		int extendedXmpLen = extendedXmp.length;
		int offset = 0;
		
		for(int i = 0; i < numOfChunks; i++) {
			IOUtils.writeShortMM(os, Marker.APP1.getValue());
			// Write segment length
			IOUtils.writeShortMM(os, 2 + XMP_EXT_ID.length() + GUID_LEN + 4 + 4 + MAX_EXTENDED_XMP_CHUNK_SIZE);
			// Write segment data
			os.write(XMP_EXT_ID.getBytes());
			os.write(guid.getBytes());
			IOUtils.writeIntMM(os, extendedXmpLen);
			IOUtils.writeIntMM(os, offset);
			os.write(ArrayUtils.subArray(extendedXmp, offset, MAX_EXTENDED_XMP_CHUNK_SIZE));
			offset += MAX_EXTENDED_XMP_CHUNK_SIZE;			
		}
		
		int leftOver = extendedXmp.length % MAX_EXTENDED_XMP_CHUNK_SIZE;
		
		if(leftOver != 0) {
			IOUtils.writeShortMM(os, Marker.APP1.getValue());
			// Write segment length
			IOUtils.writeShortMM(os, 2 + XMP_EXT_ID.length() + GUID_LEN + 4 + 4 + leftOver);
			// Write segment data
			os.write(XMP_EXT_ID.getBytes());
			os.write(guid.getBytes());
			IOUtils.writeIntMM(os, extendedXmpLen);
			IOUtils.writeIntMM(os, offset);
			os.write(ArrayUtils.subArray(extendedXmp, offset, leftOver));
		}
	}
}
 
源代码20 项目: container   文件: ResponseProcessor.java
@Override
public void process(final Exchange exchange) throws Exception {
    ResponseProcessor.LOG.debug("Processing the response...");
    final InvokeResponse invokeResponse = new InvokeResponse();

    if (exchange.getIn().getBody() instanceof HashMap) {

        ResponseProcessor.LOG.debug("Response is of type HashMap.");

        @SuppressWarnings("unchecked") final HashMap<String, String> responseMap = exchange.getIn().getBody(HashMap.class);

        final ParamsMap paramsMap = new ParamsMap();
        for (final Entry<String, String> entry : responseMap.entrySet()) {
            final String key = entry.getKey();
            final String value = entry.getValue();
            ParamsMapItemType mapItem = new ParamsMapItemType();
            mapItem.setKey(key);
            mapItem.setValue(value);
            paramsMap.getParam().add(mapItem);
        }
        invokeResponse.setParams(paramsMap);
        exchange.getIn().setBody(invokeResponse);
    } else if (exchange.getIn().getBody() instanceof Document) {

        ResponseProcessor.LOG.debug("Response is of type Document.");

        final Document responseDoc = exchange.getIn().getBody(Document.class);
        final NodeList nodeList = responseDoc.getChildNodes();

        final Doc ar = new Doc();

        for (int i = 0; i < nodeList.getLength(); i++) {
            ar.setAny((Element) nodeList.item(i));
        }
        invokeResponse.setDoc(ar);
        exchange.getIn().setBody(invokeResponse);
    }

    // Async
    if (exchange.getIn().getHeader("MessageID") != null) {
        final String messageID = exchange.getIn().getHeader("MessageID", String.class);

        exchange.getIn().setHeader("operationName", "callback");
        exchange.getIn().setHeader("operationNamespace", "http://siserver.org/wsdl");

        exchange.getIn().setHeader("RelatesTo", messageID);
        invokeResponse.setMessageID(messageID);
    }
}