View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements. See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership. The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License. You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied. See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package tests.customext.attrib;
20  
21  import junit.framework.TestCase;
22  import org.apache.ws.commons.schema.XmlSchema;
23  import org.apache.ws.commons.schema.XmlSchemaCollection;
24  import org.apache.ws.commons.schema.XmlSchemaElement;
25  import org.apache.ws.commons.schema.constants.Constants;
26  import org.w3c.dom.Document;
27  import tests.Resources;
28  
29  import javax.xml.parsers.DocumentBuilderFactory;
30  import java.io.ByteArrayInputStream;
31  import java.io.ByteArrayOutputStream;
32  import java.util.Iterator;
33  import java.util.Map;
34  
35  /**
36   * Test class to do a full parsing run with the extensions
37   */
38  public class CustomExtensionSerializerTest extends TestCase {
39  
40      public void testSerialization() throws Exception {
41          //set the system property for the custom extension registry
42          System.setProperty(Constants.SystemConstants.EXTENSION_REGISTRY_KEY,
43                  CustomExtensionRegistry.class.getName());
44  
45          //create a DOM document
46          DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
47          documentBuilderFactory.setNamespaceAware(true);
48  
49          // Skip test in JDK1.4 as it uses crimson parser and an old DOM implementation
50          if (documentBuilderFactory.getClass().toString().indexOf("crimson") != -1) {
51              return;
52          }
53          Document doc1 = documentBuilderFactory.newDocumentBuilder().
54                  parse(Resources.asURI("/external/externalAnnotations.xsd"));
55  
56          XmlSchemaCollection schemaCol = new XmlSchemaCollection();
57          XmlSchema schema = schemaCol.read(doc1,null);
58          assertNotNull(schema);
59  
60          //now serialize it to a byte stream
61          //and build a new document out of it
62          ByteArrayOutputStream baos = new ByteArrayOutputStream();
63          schema.write(baos);
64  
65  
66          Document doc2 = documentBuilderFactory.newDocumentBuilder().
67                  parse(new ByteArrayInputStream(baos.toByteArray()));
68  
69          schemaCol = new XmlSchemaCollection();
70          schema = schemaCol.read(doc2,null);
71          assertNotNull(schema);
72  
73          // get the elements and check whether their annotations are properly
74          // populated
75          Iterator values = schema.getElements().getValues();
76          while (values.hasNext()) {
77              XmlSchemaElement elt =  (XmlSchemaElement) values.next();
78              assertNotNull(elt);
79              Map metaInfoMap = elt.getMetaInfoMap();
80              assertNotNull(metaInfoMap);
81  
82              CustomAttribute customAttrib = (CustomAttribute)metaInfoMap.get(CustomAttribute.CUSTOM_ATTRIBUTE_QNAME);
83              assertNotNull(customAttrib);
84  
85          }
86  
87  
88          //remove our system property
89          System.getProperties().remove(Constants.SystemConstants.EXTENSION_REGISTRY_KEY);
90  
91      }
92  
93  }