[ https://issues.apache.org/jira/browse/XMLBEANS-579?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17429319#comment-17429319 ]
Alexander Pinske commented on XMLBEANS-579: ------------------------------------------- Yes, I did that. But the call to createSampleForType is private. So I need to call it using reflection. It works tho. {code:java} public static String createSampleForType(SchemaGlobalElement element) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { SchemaType sType = element.getType(); XmlObject object = XmlObject.Factory.newInstance(); XmlCursor cursor = object.newCursor(); // Skip the document node cursor.toNextToken(); // Using the type and the cursor, call the utility method to get a // sample XML payload for that Schema element Constructor<SampleXmlUtil> sampleXmlUtilCtor = SampleXmlUtil.class.getDeclaredConstructor(boolean.class); sampleXmlUtilCtor.setAccessible(true); Method createSampleForTypeMethod = SampleXmlUtil.class.getDeclaredMethod("createSampleForType", SchemaType.class, XmlCursor.class); createSampleForTypeMethod.setAccessible(true); createSampleForTypeMethod.invoke(sampleXmlUtilCtor.newInstance(false), sType, cursor); // Cursor now contains the sample payload // Pretty print the result. Note that the cursor is positioned at the // end of the doc so we use the original xml object that the cursor was // created upon to do the xmlText() against. XmlOptions options = new XmlOptions(); options.setSavePrettyPrint(); options.setSavePrettyPrintIndent(2); options.setSaveAggressiveNamespaces(); options.setSaveSyntheticDocumentElement(element.getName()); return object.xmlText(options); } {code} > SampleXmlUtil misses root element with only one child > ----------------------------------------------------- > > Key: XMLBEANS-579 > URL: https://issues.apache.org/jira/browse/XMLBEANS-579 > Project: XMLBeans > Issue Type: Bug > Affects Versions: Version 5.0.1 > Reporter: Alexander Pinske > Priority: Major > > When generating a sample, usually the top-level-element is xml-fragment. But > when the type contains only one child-element, it becomes the root. > {code:java} > import org.apache.xmlbeans.SchemaTypeSystem; > import org.apache.xmlbeans.XmlBeans; > import org.apache.xmlbeans.XmlException; > import org.apache.xmlbeans.XmlObject; > import org.apache.xmlbeans.XmlOptions; > import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument; > import org.apache.xmlbeans.impl.xsd2inst.SampleXmlUtil; > public class SchemaTest { > private static String generateXml(String xsdString) throws XmlException > { > XmlOptions options = new > XmlOptions().setDocumentSourceName("a.xsd"); > XmlObject xsd = SchemaDocument.Factory.parse(xsdString, > options); > SchemaTypeSystem schema = XmlBeans.compileXsd(new XmlObject[] { > xsd }, XmlBeans.getBuiltinTypeSystem(), options); > return > SampleXmlUtil.createSampleForType(schema.globalElements()[0].getType()); > } > public static void main(String[] args) throws Exception { > String xml = generateXml( > "<?xml version=\"1.0\" > encoding=\"utf-8\"?><schema elementFormDefault=\"qualified\" > targetNamespace=\"x\" xmlns=\"http://www.w3.org/2001/XMLSchema\">" > + " <element name=\"a\">" // > + " > <complexType><sequence>" // > + " > <element name=\"b\"><complexType><sequence>" // > + " > <element name=\"c\" type=\"string\" />" // > + " > </sequence></complexType></element>" // > + " > </sequence></complexType>" // > + " </element>" // > + "</schema>"); > System.out.println(xml); > } > } > {code} > Generates: > {code:xml} > <x:b xmlns:x="x"> > <x:c>string</x:c> > </x:b> > {code} > Expected: > {code:xml} > <xml-fragment xmlns:x="x"> > <x:b> > <x:c>string</x:c> > </x:b> > </xml-fragment> > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org For additional commands, e-mail: dev-h...@poi.apache.org