Проверка XML по нескольким схемам, извлеченным из WSDL

Я пытаюсь вручную обработать запрос веб-службы, используя SAAJ, но все же проверим полученный запрос на соответствие схеме WSDL для веб-службы. Этот конкретный WSDL содержит несколько элементов, которые я извлекаю с помощью wsdl4j, и когда я добираюсь до точки, где я пытаюсь создать новый Validator, яя получаю сообщение об ошибке о том, что Validator не может разрешить ссылку в одной схеме на элемент, определенный в другой: I '

org.xml.sax.SAXParseException; src-resolve: Cannot resolve the name 'ns0:CustomerNumber' to a(n) 'element declaration' component.

Мы видим острый WSDL и кодируем что-то маленькое, чтобы создать что-то воспроизводимое. "simple.wsdl» загружается правильно и в Soap-UI. Это на Windows 7 с jdk1.7.0_51.

Обратите внимание, что исходный WSDL, с которым я заметил эту проблему, был создан TIBCO BusinessWorks, поэтому я неЯ считаю, что это проблема недействительного WSDL.

Я видел другие вопросы по SO, которые похожи на это, но решения, предоставленные некажется, полностью не соответствует моему сценарию, поэтому я решил, чтобуду спрашивать снова.

Кто-нибудь знает, чтои как я могу заставить это работать?

Тестовый код:

import java.util.ArrayList;

import javax.wsdl.Definition;
import javax.wsdl.extensions.schema.Schema;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
import javax.xml.XMLConstants;
import javax.xml.transform.dom.DOMSource;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.junit.Test;
import org.w3c.dom.Element;

public class TestIt {
    @Test
    public void testWSDLSchema() throws Exception {
        WSDLFactory wsdlFactory    = WSDLFactory.newInstance();
        WSDLReader reader         = wsdlFactory.newWSDLReader();
        Definition wsdlDefinition = reader.readWSDL("test/resources/simple.wsdl");

        ArrayList wsdlSchemas = new ArrayList();

        for (Object o : wsdlDefinition.getTypes().getExtensibilityElements()) {
            if (o instanceof Schema) {
                wsdlSchemas.add(((Schema) o).getElement());
            }
        }

        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        ArrayList asrcs   = new ArrayList();

        for (Element e : wsdlSchemas) {
            asrcs.add(new DOMSource(e));
        }
        DOMSource sources[] = asrcs.toArray(new DOMSource[0]);
        javax.xml.validation.Schema schema  = factory.newSchema(sources);

        Validator schemaValidator = schema.newValidator();
    }
}

Трассировка полного стека:

Retrieving document at 'test/resources/simple.wsdl'.

org.xml.sax.SAXParseException; src-resolve: Cannot resolve the name 'ns0:CustomerNumber' to a(n) 'element declaration' component.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:347)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:4166)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaError(XSDHandler.java:4145)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getGlobalDecl(XSDHandler.java:1678)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDElementTraverser.traverseLocal(XSDElementTraverser.java:170)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.traverseLocalElements(XSDHandler.java:3618)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:633)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:616)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:574)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:540)
    at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:252)
    at TestIt.testWSDLSchema(TestIt.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

WSDL:



    
        
            
            
            
                
                    
                        
                    
                
            
            
                
                    
                        
                    
                
            
        
        
            
            
                
                    
                        
                    
                
            
        
        
            
                
                    
                        
                    
                
            
            
                
                    
                        
                    
                
            
        
        
            
                
                    
                        
                    
                
            
        
    
    
        
            
        
    
    
        
            
            
            
        
    
    
        
        
            
            
                
            
            
                
            
            
                
            
        
    
    
        
    
    
        
    
    
        
    

Ответы на вопрос(2)

Ваш ответ на вопрос