2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.onap.aai.util.genxsd;
22 import static org.hamcrest.CoreMatchers.is;
23 import static org.junit.Assert.*;
25 import java.io.BufferedWriter;
27 import java.io.FileWriter;
28 import java.io.IOException;
29 import java.nio.charset.Charset;
30 import java.nio.file.Files;
31 import java.nio.file.Path;
32 import java.nio.file.Paths;
34 import org.junit.Before;
35 import org.junit.BeforeClass;
36 import org.junit.Ignore;
37 import org.junit.Test;
38 import org.onap.aai.config.SwaggerGenerationConfiguration;
39 import org.onap.aai.setup.SchemaVersion;
40 import org.onap.aai.setup.SchemaVersions;
41 import org.junit.runner.RunWith;
42 import org.onap.aai.edges.EdgeIngestor;
43 import org.onap.aai.nodes.NodeIngestor;
44 import org.onap.aai.serialization.queryformats.QueryFormatTestHelper;
45 import org.onap.aai.setup.SchemaLocationsBean;
46 import org.onap.aai.testutils.TestUtilConfigTranslatorforBusiness;
47 import org.onap.aai.util.AAIConstants;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50 import org.springframework.beans.factory.annotation.Autowired;
51 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
52 import org.springframework.test.context.ContextConfiguration;
53 import org.springframework.test.context.TestPropertySource;
54 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
55 import org.w3c.dom.Element;
58 @RunWith(SpringJUnit4ClassRunner.class)
59 @ContextConfiguration(classes = {
61 SchemaLocationsBean.class,
62 TestUtilConfigTranslatorforBusiness.class,
65 SwaggerGenerationConfiguration.class
68 @TestPropertySource(properties = {
69 "schema.uri.base.path = /aai",
70 "schema.xsd.maxoccurs = 5000"
72 public class HTMLfromOXMTest {
73 private static final Logger logger = LoggerFactory.getLogger("HTMLfromOXMTest.class");
74 private static final String OXMFILENAME = "src/test/resources/oxm/business_oxm_v11.xml";
75 public static AnnotationConfigApplicationContext ctx = null;
76 private static String testXML;
77 protected static final String SERVICE_NAME = "JUNIT";
81 HTMLfromOXM htmlFromOxm;
84 SchemaVersions schemaVersions;
87 public static void setUpContext() throws Exception {
91 public static void setupBundleconfig() throws Exception {
92 System.setProperty("AJSC_HOME", ".");
93 System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
94 System.setProperty("aai.service.name", SERVICE_NAME);
95 QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/");
99 public void setUp() throws Exception {
103 public void setUp(int sbopt) throws Exception
105 XSDElementTest x = new XSDElementTest();
108 logger.debug(testXML);
109 BufferedWriter bw = new BufferedWriter(new FileWriter(OXMFILENAME));
115 public void testGetDocumentHeader() {
116 SchemaVersion v = schemaVersions.getAppRootVersion();
117 String header = null;
119 htmlFromOxm.setXmlVersion(testXML, v);
120 htmlFromOxm.setSchemaVersions(schemaVersions);
121 header = htmlFromOxm.getDocumentHeader();
122 } catch(Exception e) {
125 logger.debug("Header:");
126 logger.debug(header);
127 assertThat(header, is(HTMLheader()));
131 public void testProcess() {
132 SchemaVersion v = schemaVersions.getAppRootVersion();
133 String fileContent = null;
135 htmlFromOxm.setXmlVersion(testXML, v);
136 fileContent = htmlFromOxm.process();
137 } catch(Exception e) {
140 logger.debug("FileContent-I:");
141 logger.debug(fileContent);
142 assertThat(fileContent, is(HTMLresult(0)));
146 public void testProcessWithCombiningJavaTypes() {
147 SchemaVersion v = schemaVersions.getAppRootVersion();
148 String fileContent = null;
151 htmlFromOxm.setXmlVersion(testXML, v);
152 fileContent = htmlFromOxm.process();
153 } catch(Exception e) {
156 logger.debug("FileContent-I:");
157 logger.debug(fileContent);
158 assertThat(fileContent, is(HTMLresult(1)));
162 public void testHTMLfromOXMFileVersion() throws IOException {
163 String outfileName = "testXML.xml";
164 File XMLfile = new File(outfileName);
165 XMLfile.createNewFile();
166 BufferedWriter bw = null;
167 Charset charset = Charset.forName("UTF-8");
168 Path path = Paths.get(outfileName);
169 bw = Files.newBufferedWriter(path, charset);
172 SchemaVersion v = schemaVersions.getAppRootVersion();
173 String fileContent = null;
175 htmlFromOxm.setXmlVersion(testXML, v);
176 fileContent = htmlFromOxm.process();
177 } catch(Exception e) {
181 logger.debug("FileContent-I:");
182 logger.debug(fileContent);
183 assertThat(fileContent, is(HTMLresult(0)));
187 public void testHTMLfromOXMStringVersion() {
188 SchemaVersion v = schemaVersions.getAppRootVersion();
189 String fileContent = null;
191 htmlFromOxm.setXmlVersion(testXML, v);
192 fileContent = htmlFromOxm.process();
193 } catch(Exception e) {
196 logger.debug("FileContent-II:");
197 logger.debug(fileContent);
198 assertThat(fileContent, is(HTMLresult(0)));
202 public void testProcessJavaTypeElement() {
203 String target = "Element=java-type/Customer";
204 SchemaVersion v = schemaVersions.getAppRootVersion();
205 Element customer = null;
207 htmlFromOxm.setXmlVersion(testXML, v);
208 htmlFromOxm.process();
209 customer = htmlFromOxm.getJavaTypeElementSwagger("Customer");
210 } catch(Exception e) {
213 logger.debug("Element:");
214 logger.debug("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"));
215 assertThat("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"), is(target)); }
217 public String HTMLresult() {
218 return HTMLresult(0);
221 public String HTMLresult(int sbopt) {
222 StringBuilder sb = new StringBuilder(32368);
223 sb.append(HTMLheader());
224 sb.append(HTMLdefs(sbopt));
225 return sb.toString();
228 public String HTMLheader() {
229 StringBuilder sb = new StringBuilder(1500);
230 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + OxmFileProcessor.LINE_SEPARATOR);
231 sb.append("<xs:schema elementFormDefault=\"qualified\" version=\"1.0\" targetNamespace=\"http://org.onap.aai.inventory/v11\" xmlns:tns=\"http://org.onap.aai.inventory/v11\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" + OxmFileProcessor.LINE_SEPARATOR + "xmlns:jaxb=\"http://java.sun.com/xml/ns/jaxb\"" + OxmFileProcessor.LINE_SEPARATOR);
232 sb.append(" jaxb:version=\"2.1\"" + OxmFileProcessor.LINE_SEPARATOR);
233 sb.append(" xmlns:annox=\"http://annox.dev.java.net\"" + OxmFileProcessor.LINE_SEPARATOR);
234 sb.append(" jaxb:extensionBindingPrefixes=\"annox\">" + OxmFileProcessor.DOUBLE_LINE_SEPARATOR);
235 return sb.toString();
238 public String HTMLdefs() {
241 public String HTMLdefs(int sbopt) {
242 StringBuilder sb = new StringBuilder(1500);
243 sb.append(" <xs:element name=\"service-subscription\">" + OxmFileProcessor.LINE_SEPARATOR);
244 sb.append(" <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
245 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
246 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
247 sb.append(" <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Object that group service instances.\",indexedProps=\"service-type\",dependentOn=\"customer\",container=\"service-subscriptions\",crossEntityReference=\"service-instance,service-type\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
248 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
249 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
250 sb.append(" <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
251 sb.append(" <xs:element name=\"service-type\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
252 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
253 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
254 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(isKey=true,description=\"Value defined by orchestration to identify this service.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
255 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
256 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
257 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
258 sb.append(" <xs:element name=\"temp-ub-sub-account-id\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
259 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
260 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
261 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"This property will be deleted from A&AI in the near future. Only stop gap solution.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
262 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
263 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
264 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
265 sb.append(" <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
266 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
267 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
268 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Used for optimistic concurrency. Must be empty on create, valid on update and delete.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
269 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
270 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
271 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
272 sb.append(" </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
273 sb.append(" </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
274 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
275 sb.append(" <xs:element name=\"service-subscriptions\">" + OxmFileProcessor.LINE_SEPARATOR);
276 sb.append(" <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
277 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
278 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
279 sb.append(" <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Collection of objects that group service instances.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
280 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
281 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
282 sb.append(" <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
283 sb.append(" <xs:element ref=\"tns:service-subscription\" minOccurs=\"0\" maxOccurs=\"5000\"/>" + OxmFileProcessor.LINE_SEPARATOR);
284 sb.append(" </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
285 sb.append(" </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
286 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
287 sb.append(" <xs:element name=\"customer\">" + OxmFileProcessor.LINE_SEPARATOR);
288 sb.append(" <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
289 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
290 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
292 sb.append(" <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"customer identifiers to provide linkage back to BSS information.\",nameProps=\"subscriber-name\",indexedProps=\"subscriber-name,global-customer-id,subscriber-type\",searchable=\"global-customer-id,subscriber-name\",uniqueProps=\"global-customer-id\",container=\"customers\",namespace=\"business\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
294 sb.append(" <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"customer identifiers to provide linkage back to BSS information.\",nameProps=\"subscriber-name\",indexedProps=\"subscriber-type,subscriber-name,global-customer-id\",searchable=\"global-customer-id,subscriber-name\",uniqueProps=\"global-customer-id\",container=\"customers\",namespace=\"business\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
296 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
297 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
298 sb.append(" <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
299 sb.append(" <xs:element name=\"global-customer-id\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
300 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
301 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
302 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(isKey=true,description=\"Global customer id used across to uniquely identify customer.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
303 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
304 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
305 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
306 sb.append(" <xs:element name=\"subscriber-name\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
307 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
308 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
309 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Subscriber name, an alternate way to retrieve a customer.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
310 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
311 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
312 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
314 sb.append(" <xs:element name=\"subscriber-type\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
315 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
316 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
317 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Subscriber type, a way to provide VID with only the INFRA customers.\",defaultValue=\"CUST\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
318 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
319 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
320 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
321 sb.append(" <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
322 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
323 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
324 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Used for optimistic concurrency. Must be empty on create, valid on update and delete.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
325 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
326 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
327 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
329 sb.append(" <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
330 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
331 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
332 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Used for optimistic concurrency. Must be empty on create, valid on update and delete.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
333 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
334 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
335 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
336 sb.append(" <xs:element name=\"subscriber-type\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
337 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
338 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
339 sb.append(" <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Subscriber type, a way to provide VID with only the INFRA customers.\",defaultValue=\"CUST\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
340 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
341 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
342 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
345 sb.append(" <xs:element ref=\"tns:service-subscriptions\" minOccurs=\"0\"/>" + OxmFileProcessor.LINE_SEPARATOR);
346 sb.append(" </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
347 sb.append(" </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
348 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
349 sb.append(" <xs:element name=\"customers\">" + OxmFileProcessor.LINE_SEPARATOR);
350 sb.append(" <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
351 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
352 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
353 sb.append(" <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Collection of customer identifiers to provide linkage back to BSS information.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
354 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
355 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
356 sb.append(" <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
357 sb.append(" <xs:element ref=\"tns:customer\" minOccurs=\"0\" maxOccurs=\"5000\"/>" + OxmFileProcessor.LINE_SEPARATOR);
358 sb.append(" </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
359 sb.append(" </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
360 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
361 sb.append(" <xs:element name=\"business\">" + OxmFileProcessor.LINE_SEPARATOR);
362 sb.append(" <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
363 sb.append(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
364 sb.append(" <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
365 sb.append(" <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Namespace for business related constructs\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
366 sb.append(" </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
367 sb.append(" </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
368 sb.append(" <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
369 sb.append(" <xs:element ref=\"tns:customers\" minOccurs=\"0\"/>" + OxmFileProcessor.LINE_SEPARATOR);
370 sb.append(" </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
371 sb.append(" </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
372 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
373 sb.append(" <xs:element name=\"inventory\">" + OxmFileProcessor.LINE_SEPARATOR);
374 sb.append(" <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
375 sb.append(" <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
376 sb.append(" <xs:element ref=\"tns:business\" minOccurs=\"0\"/>" + OxmFileProcessor.LINE_SEPARATOR);
377 sb.append(" </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
378 sb.append(" </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
379 sb.append(" </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
380 sb.append("</xs:schema>" + OxmFileProcessor.LINE_SEPARATOR);
381 return sb.toString();