On Fri, Dec 21, 2012 at 12:27 PM, Willem jiang <willem.ji...@gmail.com> wrote: > Hi > First xerces is Apache license, that is why Sun /Oracle can redistribute it. > The common/common.xsd is in the relative path of the health.xsd. >
Willem from where did you copy that code? Its not written by you. The link from Babak points to code that looks very similar to the code you committed. And that code is GPL licensed. * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * > Spring support it out of box [1], so I think we need to provide the same > feature here. > > [1]https://jira.springsource.org/browse/SWS-413 > > -- > Willem Jiang > > Red Hat, Inc. > FuseSource is now part of Red Hat > Web: http://www.fusesource.com | http://www.redhat.com > Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) > (English) > http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese) > Twitter: willemjiang > Weibo: 姜宁willem > > > > > On Friday, December 21, 2012 at 7:00 PM, Claus Ibsen wrote: > >> On Fri, Dec 21, 2012 at 11:39 AM, Babak Vahdat >> <babak.vah...@swissonline.ch (mailto:babak.vah...@swissonline.ch)> wrote: >> > Hi >> > >> > Be aware that Oracle considers this to be it's own copyright property: >> > >> > http://cr.openjdk.java.net/~joehw/jdk8/7160496/src/webrev/raw_files/new/src/com/sun/xml/internal/stream/XMLEntityStorage.java >> > >> > So that this code *could* cause some juristic story as well, the latest one >> > we all know about was that famous "rangeCheck" method by Joshua Bloch. >> > >> > http://www.theverge.com/2012/4/19/2961128/google-chief-java-architect-likely-i-copied-sun-code-in-android >> >> Yeah I think we should revert the commit and find another solution >> without copying some code from SUN/Oracle etc. >> Its GPL licensed code. >> >> I haven't looked at the problem. But if its to load a >> "common/common.xsd" resource from the classpath. >> Which is relative to the "starting path" given in the Camel validation >> uri. Then I dont understand why you >> cant use the existing ClassResolver API from Camel to load that. >> >> Code from top of my head: >> >> String onlyPath = FileUtil.onlyPath("theUriOfTheCamelEndpoint"); >> InputStream is = resolver.loadResourceAsInputStream(onlyPath + "/" + >> "common/common.xsd"); >> >> >> >> > Babak >> > >> > >> > Willem.Jiang wrote >> > > Hi Claus, >> > > >> > > The code is toke from the xerces which will set the baseUri to start with >> > > the user directory it cannot find right way to setup the baseUri. >> > > I will revisit the code to find a better solution to get rid of the weird >> > > code. >> > > >> > > >> > > -- >> > > Willem Jiang >> > > >> > > Red Hat, Inc. >> > > FuseSource is now part of Red Hat >> > > Web: http://www.fusesource.com | http://www.redhat.com >> > > Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) >> > > (English) >> > > http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese) >> > > Twitter: willemjiang >> > > Weibo: 姜宁willem >> > > >> > > >> > > >> > > >> > > >> > > On Friday, December 21, 2012 at 4:11 PM, Claus Ibsen wrote: >> > > >> > > > Willem what's all the code in FileUtil. >> > > > At first glance this doesn't look to good, and easy to support such >> > > > code. >> > > > >> > > > I would like to find a better solution. >> > > > And why is this only related to validator component? >> > > > >> > > > Can we look at another solution that doesn't require adding a lot of >> > > > weird code? >> > > > >> > > > >> > > > >> > > > On Fri, Dec 21, 2012 at 3:18 AM, < >> > >> > > ningjiang@ >> > >> > > (mailto: >> > >> > > ningjiang@ >> > >> > > )> wrote: >> > > > > Author: ningjiang >> > > > > Date: Fri Dec 21 02:18:34 2012 >> > > > > New Revision: 1424788 >> > > > > >> > > > > URL: http://svn.apache.org/viewvc?rev=1424788&view=rev >> > > > > Log: >> > > > > CAMEL-5837 fix the schema validator imports with relative path issue >> > > > > >> > > > > Added: >> > > > camel/trunk/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorIncludeRelativeRouteTest.java >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/common/ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/common/common.xsd >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/health.xsd >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/person.xsd >> > > > > Modified: >> > > > >> > > > >> > > > camel/trunk/camel-core/src/main/java/org/apache/camel/component/validator/DefaultLSResourceResolver.java >> > > > >> > > > >> > > > camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java >> > > > > >> > > > > Modified: >> > > > camel/trunk/camel-core/src/main/java/org/apache/camel/component/validator/DefaultLSResourceResolver.java >> > > > > URL: >> > > > >> > > > >> > > > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/validator/DefaultLSResourceResolver.java?rev=1424788&r1=1424787&r2=1424788&view=diff >> > > > >> > > > >> > > > ============================================================================== >> > > > > --- >> > > > >> > > > >> > > > camel/trunk/camel-core/src/main/java/org/apache/camel/component/validator/DefaultLSResourceResolver.java >> > > > (original) >> > > > > +++ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/main/java/org/apache/camel/component/validator/DefaultLSResourceResolver.java >> > > > Fri Dec 21 02:18:34 2012 >> > > > > @@ -50,6 +50,7 @@ public class DefaultLSResourceResolver i >> > > > > throw new IllegalArgumentException(String.format("Resource: %s refers >> > > > >> > > > >> > > > an invalid resource without SystemId." >> > > > > + " Invalid resource has type: %s, namespaceURI: %s, publicId: %s, >> > > > >> > > > >> > > > systemId: %s, baseURI: %s", resourceUri, type, namespaceURI, publicId, >> > > > systemId, baseURI)); >> > > > > } >> > > > > + >> > > > > return new DefaultLSInput(publicId, systemId, baseURI); >> > > > > } >> > > > > >> > > > > @@ -64,11 +65,47 @@ public class DefaultLSResourceResolver i >> > > > > this.publicId = publicId; >> > > > > this.systemId = systemId; >> > > > > this.baseURI = baseURI; >> > > > > - >> > > > > + this.uri = getInputUri(); >> > > > > + } >> > > > > + >> > > > > + >> > > > > + private String getInputUri() { >> > > > > + // find the xsd with relative path >> > > > > + if (ObjectHelper.isNotEmpty(baseURI)) { >> > > > > + String inputUri = getUri(getRelativePath(baseURI)); >> > > > > + try { >> > > > > + >> > > > >> > > > >> > > > ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext.getClassResolver(), >> > > > inputUri); >> > > > > + return inputUri; >> > > > > + } catch (IOException e) { >> > > > > + // ignore the exception >> > > > > + } >> > > > > + } >> > > > > + // don't use the relative path >> > > > > + return getUri(""); >> > > > > + } >> > > > > + >> > > > > + private String getRelativePath(String base) { >> > > > > + String userDir = ""; >> > > > > + String answer = ""; >> > > > > + if (ObjectHelper.isNotEmpty(base)) { >> > > > > + try { >> > > > > + userDir = FileUtil.getUserDir().toString(); >> > > > > + } catch (Exception ex) { >> > > > > + // do nothing here >> > > > > + } >> > > > > + // get the relative path from the userdir >> > > > > + if (ObjectHelper.isNotEmpty(base) && base.startsWith("file") && >> > > > >> > > > >> > > > base.startsWith(userDir)) { >> > > > > + answer = FileUtil.onlyPath(base.substring(userDir.length())) + "/"; >> > > > > + } >> > > > > + } >> > > > > + return answer; >> > > > > + } >> > > > > + >> > > > > + private String getUri(String relativePath) { >> > > > > if (resourcePath != null) { >> > > > > - uri = resourcePath + "/" + systemId; >> > > > > + return FileUtil.onlyPath(resourceUri) + "/" + relativePath + >> > > > >> > > > >> > > > systemId; >> > > > > } else { >> > > > > - uri = systemId; >> > > > > + return relativePath + systemId; >> > > > > } >> > > > > } >> > > > > >> > > > > @@ -164,4 +201,6 @@ public class DefaultLSResourceResolver i >> > > > > } >> > > > > } >> > > > > >> > > > > + >> > > > > + >> > > > > } >> > > > > >> > > > > Modified: >> > > > camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java >> > > > > URL: >> > > > >> > > > >> > > > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=1424788&r1=1424787&r2=1424788&view=diff >> > > > >> > > > >> > > > ============================================================================== >> > > > > --- >> > > > >> > > > >> > > > camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java >> > > > (original) >> > > > > +++ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java >> > > > Fri Dec 21 02:18:34 2012 >> > > > > @@ -16,10 +16,13 @@ >> > > > > */ >> > > > > package org.apache.camel.util; >> > > > > >> > > > > + >> > > > > import java.io.File; >> > > > > import java.io.FileInputStream; >> > > > > import java.io.FileOutputStream; >> > > > > import java.io.IOException; >> > > > > +import java.net.URI; >> > > > > +import java.net.URISyntaxException; >> > > > > import java.nio.channels.FileChannel; >> > > > > import java.util.Iterator; >> > > > > import java.util.Locale; >> > > > > @@ -39,8 +42,149 @@ public final class FileUtil { >> > > > > private static final transient Logger LOG = >> > > > >> > > > >> > > > LoggerFactory.getLogger(FileUtil.class); >> > > > > private static final int RETRY_SLEEP_MILLIS = 10; >> > > > > private static File defaultTempDir; >> > > > > - >> > > > > + >> > > > > + // current value of the "user.dir" property >> > > > > + private static String gUserDir; >> > > > > + // cached URI object for the current value of the escaped >> > > > > "user.dir" >> > > > >> > > > >> > > > property stored as a URI >> > > > > + private static URI gUserDirURI; >> > > > > + // which ASCII characters need to be escaped >> > > > > + private static boolean gNeedEscaping[] = new boolean[128]; >> > > > > + // the first hex character if a character needs to be escaped >> > > > > + private static char gAfterEscaping1[] = new char[128]; >> > > > > + // the second hex character if a character needs to be escaped >> > > > > + private static char gAfterEscaping2[] = new char[128]; >> > > > > + private static char[] gHexChs = {'0', '1', '2', '3', '4', '5', '6', >> > > > >> > > > >> > > > '7', >> > > > > + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; >> > > > > + // initialize the above 3 arrays >> > > > > + static { >> > > > > + for (int i = 0; i <= 0x1f; i++) { >> > > > > + gNeedEscaping[i] = true; >> > > > > + gAfterEscaping1[i] = gHexChs[i >> 4]; >> > > > > + gAfterEscaping2[i] = gHexChs[i & 0xf]; >> > > > > + } >> > > > > + gNeedEscaping[0x7f] = true; >> > > > > + gAfterEscaping1[0x7f] = '7'; >> > > > > + gAfterEscaping2[0x7f] = 'F'; >> > > > > + char[] escChs = {' ', '<', '>', '#', '%', '"', '{', '}', >> > > > > + '|', '\\', '^', '~', '[', ']', '`'}; >> > > > > + int len = escChs.length; >> > > > > + char ch; >> > > > > + for (int i = 0; i < len; i++) { >> > > > > + ch = escChs[i]; >> > > > > + gNeedEscaping[ch] = true; >> > > > > + gAfterEscaping1[ch] = gHexChs[ch >> 4]; >> > > > > + gAfterEscaping2[ch] = gHexChs[ch & 0xf]; >> > > > > + } >> > > > > + } >> > > > > + >> > > > > private FileUtil() { >> > > > > + // Utils method >> > > > > + } >> > > > > + >> > > > > + >> > > > > + // To escape the "user.dir" system property, by using %HH to >> > > > >> > > > >> > > > represent >> > > > > + // special ASCII characters: 0x00~0x1F, 0x7F, ' ', '<', '>', '#', >> > > > > '%' >> > > > > + // and '"'. It's a static method, so needs to be synchronized. >> > > > > + // this method looks heavy, but since the system property isn't >> > > > >> > > > >> > > > expected >> > > > > + // to change often, so in most cases, we only need to return the >> > > > > URI >> > > > > + // that was escaped before. >> > > > > + // According to the URI spec, non-ASCII characters (whose value >= >> > > > >> > > > >> > > > 128) >> > > > > + // need to be escaped too. >> > > > > + // REVISIT: don't know how to escape non-ASCII characters, >> > > > > especially >> > > > > + // which encoding to use. Leave them for now. >> > > > > + public static synchronized URI getUserDir() throws >> > > > > URISyntaxException >> > > > >> > > > >> > > > { >> > > > > + // get the user.dir property >> > > > > + String userDir = ""; >> > > > > + try { >> > > > > + userDir = System.getProperty("user.dir"); >> > > > > + } catch (SecurityException se) { >> > > > > + } >> > > > > + >> > > > > + // return empty string if property value is empty string. >> > > > > + if (userDir.length() == 0) { >> > > > > + return new URI("file", "", "", null, null); >> > > > > + } >> > > > > + // compute the new escaped value if the new property value doesn't >> > > > > + // match the previous one >> > > > > + if (gUserDirURI != null && userDir.equals(gUserDir)) { >> > > > > + return gUserDirURI; >> > > > > + } >> > > > > + >> > > > > + // record the new value as the global property value >> > > > > + gUserDir = userDir; >> > > > > + >> > > > > + char separator = java.io.File.separatorChar; >> > > > > + userDir = userDir.replace(separator, '/'); >> > > > > + >> > > > > + int len = userDir.length(); >> > > > > + int ch; >> > > > > + StringBuffer buffer = new StringBuffer(len * 3); >> > > > > + // change C:/blah to /C:/blah >> > > > > + if (len >= 2 && userDir.charAt(1) == ':') { >> > > > > + ch = Character.toUpperCase(userDir.charAt(0)); >> > > > > + if (ch >= 'A' && ch <= 'Z') { >> > > > > + buffer.append('/'); >> > > > > + } >> > > > > + } >> > > > > + >> > > > > + // for each character in the path >> > > > > + int i = 0; >> > > > > + for (; i < len; i++) { >> > > > > + ch = userDir.charAt(i); >> > > > > + // if it's not an ASCII character, break here, and use UTF-8 >> > > > > encoding >> > > > > + if (ch >= 128) { >> > > > > + break; >> > > > > + } >> > > > > + if (gNeedEscaping[ch]) { >> > > > > + buffer.append('%'); >> > > > > + buffer.append(gAfterEscaping1[ch]); >> > > > > + buffer.append(gAfterEscaping2[ch]); >> > > > > + // record the fact that it's escaped >> > > > > + } else { >> > > > > + buffer.append((char)ch); >> > > > > + } >> > > > > + } >> > > > > + >> > > > > + // we saw some non-ascii character >> > > > > + if (i < len) { >> > > > > + // get UTF-8 bytes for the remaining sub-string >> > > > > + byte[] bytes = null; >> > > > > + byte b; >> > > > > + try { >> > > > > + bytes = userDir.substring(i).getBytes("UTF-8"); >> > > > > + } catch (java.io.UnsupportedEncodingException e) { >> > > > > + // should never happen >> > > > > + return new URI("file", "", userDir, null, null); >> > > > > + } >> > > > > + len = bytes.length; >> > > > > + >> > > > > + // for each byte >> > > > > + for (i = 0; i < len; i++) { >> > > > > + b = bytes[i]; >> > > > > + // for non-ascii character: make it positive, then escape >> > > > > + if (b < 0) { >> > > > > + ch = b + 256; >> > > > > + buffer.append('%'); >> > > > > + buffer.append(gHexChs[ch >> 4]); >> > > > > + buffer.append(gHexChs[ch & 0xf]); >> > > > > + } else if (gNeedEscaping[b]) { >> > > > > + buffer.append('%'); >> > > > > + buffer.append(gAfterEscaping1[b]); >> > > > > + buffer.append(gAfterEscaping2[b]); >> > > > > + } else { >> > > > > + buffer.append((char)b); >> > > > > + } >> > > > > + } >> > > > > + } >> > > > > + >> > > > > + // change blah/blah to blah/blah/ >> > > > > + if (!userDir.endsWith("/")) { >> > > > > + buffer.append('/'); >> > > > > + } >> > > > > + >> > > > > + gUserDirURI = new URI("file", "", buffer.toString(), null, null); >> > > > > + >> > > > > + return gUserDirURI; >> > > > > } >> > > > > >> > > > > /** >> > > > > >> > > > > Added: >> > > > camel/trunk/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorIncludeRelativeRouteTest.java >> > > > > URL: >> > > > >> > > > >> > > > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorIncludeRelativeRouteTest.java?rev=1424788&view=auto >> > > > >> > > > >> > > > ============================================================================== >> > > > > --- >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorIncludeRelativeRouteTest.java >> > > > (added) >> > > > > +++ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorIncludeRelativeRouteTest.java >> > > > Fri Dec 21 02:18:34 2012 >> > > > > @@ -0,0 +1,66 @@ >> > > > > +/** >> > > > > + * Licensed to the Apache Software Foundation (ASF) under one or >> > > > > more >> > > > > + * contributor license agreements. See the NOTICE file distributed >> > > > >> > > > >> > > > with >> > > > > + * this work for additional information regarding copyright >> > > > > ownership. >> > > > > + * The ASF licenses this file to You under the Apache License, >> > > > > Version >> > > > >> > > > >> > > > 2.0 >> > > > > + * (the "License"); you may not use this file except in compliance >> > > > >> > > > >> > > > with >> > > > > + * the License. You may obtain a copy of the License at >> > > > > + * >> > > > > + * http://www.apache.org/licenses/LICENSE-2.0 >> > > > > + * >> > > > > + * Unless required by applicable law or agreed to in writing, >> > > > > software >> > > > > + * distributed under the License is distributed on an "AS IS" BASIS, >> > > > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >> > > > >> > > > >> > > > implied. >> > > > > + * See the License for the specific language governing permissions >> > > > > and >> > > > > + * limitations under the License. >> > > > > + */ >> > > > > +package org.apache.camel.component.validator; >> > > > > + >> > > > > +import org.apache.camel.ValidationException; >> > > > > +import org.apache.camel.builder.RouteBuilder; >> > > > > +import org.apache.camel.component.mock.MockEndpoint; >> > > > > + >> > > > > +public class ValidatorIncludeRelativeRouteTest extends >> > > > >> > > > >> > > > ValidatorIncludeRouteTest { >> > > > > + >> > > > > + public void testValidMessage() throws Exception { >> > > > > + validEndpoint.expectedMessageCount(1); >> > > > > + finallyEndpoint.expectedMessageCount(1); >> > > > > + >> > > > > + String body = " >> > > > >> > > >> > > >> > > <p:person user=\"james\" xmlns:p=\"org.person\" >> > > xmlns:h=\"org.health.check.person\" xmlns:c=\"org.health.check.common\"> >> > > \n" >> > > > > + + " >> > > > >> > > >> > > >> > > <p:firstName> >> > > James >> > > </p:firstName> >> > > \n" >> > > > > + + " >> > > > >> > > >> > > >> > > <p:lastName> >> > > Strachan >> > > </p:lastName> >> > > \n" >> > > > > + + " >> > > > >> > > >> > > >> > > <p:city> >> > > London >> > > </p:city> >> > > \n" >> > > > > + + " >> > > > >> > > >> > > >> > > <h:health> >> > > \n" >> > > > > + + " >> > > > >> > > >> > > >> > > <h:lastCheck> >> > > 2011-12-23 >> > > </h:lastCheck> >> > > \n" >> > > > > + + " >> > > > >> > > >> > > >> > > <h:status> >> > > OK >> > > </h:status> >> > > \n" >> > > > > + + " >> > > > >> > > >> > > >> > > <c:commonElement> >> > > " >> > > > > + + " >> > > > >> > > >> > > >> > > <c:element1/> >> > > " >> > > > > + + " >> > > > >> > > >> > > >> > > <c:element2/> >> > > " >> > > > > + + " >> > > > >> > > >> > > >> > > </c:commonElement> >> > > " >> > > > > + + " >> > > > >> > > >> > > >> > > </h:health> >> > > \n" >> > > > > + + " >> > > > >> > > >> > > >> > > </p:person> >> > > "; >> > > > > + >> > > > > + template.sendBody("direct:start", body); >> > > > > + >> > > > > + MockEndpoint.assertIsSatisfied(validEndpoint, invalidEndpoint, >> > > > >> > > > >> > > > finallyEndpoint); >> > > > > + } >> > > > > + >> > > > > + @Override >> > > > > + protected RouteBuilder createRouteBuilder() throws Exception { >> > > > > + return new RouteBuilder() { >> > > > > + @Override >> > > > > + public void configure() throws Exception { >> > > > > + from("direct:start") >> > > > > + .doTry() >> > > > > + >> > > > > .to("validator:org/apache/camel/component/validator/xsds/person.xsd") >> > > > > + .to("mock:valid") >> > > > > + .doCatch(ValidationException.class) >> > > > > + .to("mock:invalid") >> > > > > + .doFinally() >> > > > > + .to("mock:finally") >> > > > > + .end(); >> > > > > + } >> > > > > + }; >> > > > > + } >> > > > > + >> > > > > +} >> > > > > >> > > > > Added: >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/common/common.xsd >> > > > > URL: >> > > > >> > > > >> > > > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/common/common.xsd?rev=1424788&view=auto >> > > > >> > > > >> > > > ============================================================================== >> > > > > --- >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/common/common.xsd >> > > > (added) >> > > > > +++ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/common/common.xsd >> > > > Fri Dec 21 02:18:34 2012 >> > > > > @@ -0,0 +1,14 @@ >> > > > > +<?xml version="1.0" encoding="UTF-8"?> >> > > > > + >> > > > >> > > >> > > >> > > <xs:schema >> > > >> > > >> > > > + attributeFormDefault="unqualified" >> > > > > + elementFormDefault="qualified" >> > > > > + targetNamespace="org.health.check.common" >> > > > > + xmlns:xs="http://www.w3.org/2001/XMLSchema"> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element name="commonElement" type="common:commonType" >> > > xmlns:common="org.health.check.common"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:complexType name="commonType"> >> > > > > + >> > > > >> > > >> > > >> > > <xs:sequence> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element type="xs:string" name="element1"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element type="xs:string" name="element2"/> >> > > > > + >> > > > >> > > >> > > >> > > </xs:sequence> >> > > > > + >> > > > >> > > >> > > >> > > </xs:complexType> >> > > > > + >> > > > >> > > >> > > >> > > </xs:schema> >> > > > > \ No newline at end of file >> > > > > >> > > > > Added: >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/health.xsd >> > > > > URL: >> > > > >> > > > >> > > > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/health.xsd?rev=1424788&view=auto >> > > > >> > > > >> > > > ============================================================================== >> > > > > --- >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/health.xsd >> > > > (added) >> > > > > +++ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/health/health.xsd >> > > > Fri Dec 21 02:18:34 2012 >> > > > > @@ -0,0 +1,18 @@ >> > > > > +<?xml version="1.0" encoding="UTF-8"?> >> > > > > + >> > > > >> > > >> > > >> > > <xs:schema >> > > >> > > >> > > > + attributeFormDefault="unqualified" >> > > > > + elementFormDefault="qualified" >> > > > > + targetNamespace="org.health.check.person" >> > > > > + xmlns:xs="http://www.w3.org/2001/XMLSchema" >> > > > > + xmlns:common="org.health.check.common"> >> > > > > + >> > > > >> > > >> > > >> > > <xs:import schemaLocation="common/common.xsd" >> > > namespace="org.health.check.common"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element name="health" type="org:healthType" >> > > xmlns:org="org.health.check.person"/> >> > > > > + >> > > > > + >> > > > >> > > >> > > >> > > <xs:complexType name="healthType"> >> > > > > + >> > > > >> > > >> > > >> > > <xs:sequence> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element type="xs:string" name="lastCheck"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element type="xs:string" name="status"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element ref="common:commonElement" maxOccurs="1" minOccurs="0"/> >> > > > > + >> > > > >> > > >> > > >> > > </xs:sequence> >> > > > > + >> > > > >> > > >> > > >> > > </xs:complexType> >> > > > > + >> > > > >> > > >> > > >> > > </xs:schema> >> > > > > \ No newline at end of file >> > > > > >> > > > > Added: >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/person.xsd >> > > > > URL: >> > > > >> > > > >> > > > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/person.xsd?rev=1424788&view=auto >> > > > >> > > > >> > > > ============================================================================== >> > > > > --- >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/person.xsd >> > > > (added) >> > > > > +++ >> > > > >> > > > >> > > > camel/trunk/camel-core/src/test/resources/org/apache/camel/component/validator/xsds/person.xsd >> > > > Fri Dec 21 02:18:34 2012 >> > > > > @@ -0,0 +1,20 @@ >> > > > > +<?xml version="1.0" encoding="UTF-8"?> >> > > > > + >> > > > >> > > >> > > >> > > <xs:schema attributeFormDefault="unqualified" >> > > >> > > >> > > > + elementFormDefault="qualified" >> > > > > + xmlns:xs="http://www.w3.org/2001/XMLSchema" >> > > > > + xmlns:p="org.person" >> > > > > + targetNamespace="org.person" >> > > > > + xmlns:h="org.health.check.person"> >> > > > > + >> > > > >> > > >> > > >> > > <xs:import schemaLocation="health/health.xsd" >> > > namespace="org.health.check.person"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element name="person" type="p:personType"> >> > > > > + >> > > > >> > > >> > > >> > > </xs:element> >> > > > > + >> > > > >> > > >> > > >> > > <xs:complexType name="personType"> >> > > > > + >> > > > >> > > >> > > >> > > <xs:sequence> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element type="xs:string" name="firstName"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element type="xs:string" name="lastName"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element type="xs:string" name="city"/> >> > > > > + >> > > > >> > > >> > > >> > > <xs:element ref="h:health" maxOccurs="1" minOccurs="0"/> >> > > > > + >> > > > >> > > >> > > >> > > </xs:sequence> >> > > > > + >> > > > >> > > >> > > >> > > <xs:attribute type="xs:string" name="user"/> >> > > > > + >> > > > >> > > >> > > >> > > </xs:complexType> >> > > > > + >> > > > >> > > >> > > >> > > </xs:schema> >> > > > > \ No newline at end of file >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > -- >> > > > Claus Ibsen >> > > > ----------------- >> > > > Red Hat, Inc. >> > > > FuseSource is now part of Red Hat >> > > > Email: >> > > >> > >> > >> > >> > > cibsen@ >> > >> > > (mailto: >> > >> > > cibsen@ >> > >> > > ) >> > > > Web: http://fusesource.com >> > > > Twitter: davsclaus >> > > > Blog: http://davsclaus.com >> > > > Author of Camel in Action: http://www.manning.com/ibsen >> > > >> > >> > >> > >> > >> > >> > >> > >> > -- >> > View this message in context: >> > http://camel.465427.n5.nabble.com/Re-svn-commit-r1424788-in-camel-trunk-camel-core-src-main-java-org-apache-camel-component-validator--tp5724487p5724495.html >> > Sent from the Camel Development mailing list archive at Nabble.com >> > (http://Nabble.com). >> >> >> >> >> >> -- >> Claus Ibsen >> ----------------- >> Red Hat, Inc. >> FuseSource is now part of Red Hat >> Email: cib...@redhat.com (mailto:cib...@redhat.com) >> Web: http://fusesource.com >> Twitter: davsclaus >> Blog: http://davsclaus.com >> Author of Camel in Action: http://www.manning.com/ibsen > > > -- Claus Ibsen ----------------- Red Hat, Inc. FuseSource is now part of Red Hat Email: cib...@redhat.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen