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.
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