Avatar billede obix Nybegynder
13. december 2005 - 15:01 Der er 3 kommentarer

Fejl i xsd schema validering af xml

Hej Eksperter.

Jeg har et problem. Jeg har downloadet et ubl xsd schema som fungerer perfekt når jeg bruger det fra xmlspy.

Hvis jeg derimod benytter det via det java kode jeg har lavet så fungerer det ikke. Jeg får følgende fejl


org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'cac:DocumentReferenceType' to a(n) 'type definition' component.
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'udt:DateType' to a(n) 'type definition' component.
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'cbc:CopyIndicator' to a(n) 'element declaration' component.
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'res:AcknowledgementResponseCodeType' to a(n) 'type definition' component.
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'cur:CurrencyCodeType' to a(n) 'type definition' component.
org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'cbc:IssueDate'. One of '{"urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":SellersID, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":GUID, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":AcknowledgementResponseCode, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":TransactionCurrencyCode, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":PricingCurrencyCode, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":EarliestDate, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":ValidityDurationMeasure, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":TotalPackagesQuantity, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":LineItemCountNumeric, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":ContractDocumentReference, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":QuoteDocumentReference, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":AdditionalDocumentReference, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":OriginatorParty, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":FreightForwarderParty, "urn:oasis:names:specification:ubl:schema:xsd:Order-1.0":DestinationCountry}' is expected.

dk.edbgruppen.genericdocumentprocess.exceptionhandling.GenericDocumentException
    at dk.edbgruppen.junits.xsdtests.TestUblXsd.parse(TestUblXsd.java:143)
    at dk.edbgruppen.junits.xsdtests.TestUblXsd.testUblOrderXsd(TestUblXsd.java:72)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at junit.framework.TestCase.runTest(TestCase.java:166)
    at junit.framework.TestCase.runBare(TestCase.java:140)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:131)
    at junit.framework.TestSuite.runTest(TestSuite.java:173)
    at junit.framework.TestSuite.run(TestSuite.java:168)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

Xsden kan findes her: http://docs.oasis-open.org/ubl/cd-UBL-1.0/xsd/maindoc/UBL-Order-1.0.xsd

Jeg har fundet frem til følgende link der forklarer problemet tror jeg.
http://forum.java.sun.com/thread.jspa?threadID=554680&messageID=2719072

Men efter at have læst det kan jeg stadig ikke få det til at virke. Er der nogle bud på hvad jeg kan have gjort forkert?


Java metoden jeg bruger ser således ud.

public Document parse(byte[] documentAsBytes, InputStream schema) throws Exception {
        try {
           
           
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            if (schema != null) {
                String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
                String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
                String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
               
                factory.setNamespaceAware(true);
                factory.setValidating(true);
                try {
                    factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
                } catch (IllegalArgumentException x) {
                }
                factory.setAttribute(JAXP_SCHEMA_SOURCE, schema);
            }
            DocumentBuilder builder = factory.newDocumentBuilder();
            ValidationHandler errorHandler = new ValidationHandler() {
                public void warning(SAXParseException arg0) throws SAXException {
                    super.warning(arg0);
                }

                public void error(SAXParseException arg0) {
                    super.error(arg0);
                }

                public void fatalError(SAXParseException arg0) {
                    super.fatalError(arg0);
                }

                public String getError() {
                    return super.getError();
                }

                public String getFatalError() {
                    return super.getFatalError();
                }
            };
            builder.setErrorHandler(errorHandler);
            Document d = builder.parse(new BufferedInputStream(new ByteArrayInputStream(documentAsBytes)));
            if (d == null) {
                throw new IllegalStateException("No document created");
            }
            String error = errorHandler.getError();
            System.out.println(error);
            String fatalError = errorHandler.getFatalError();
            System.out.println(fatalError);
            if (error.length() > 0) {
                throw new IllegalStateException(error);
            } else if (fatalError.length() > 0) {
                throw new IllegalStateException(fatalError);
            }
            return d;
        } catch (Throwable ex) {
            List list = new LinkedList();
            //list.add(schemaPath);
            throw new GenericDocumentException(1, 10, 2, ex, list);
        }
    }
Avatar billede obix Nybegynder
13. december 2005 - 15:16 #1
Et ubl dokument til test.

<?xml version="1.0" encoding="UTF-8"?>
<Order xmlns="urn:oasis:names:specification:ubl:schema:xsd:Order-1.0"
xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Order-1.0"
xmlns:res="urn:oasis:names:specification:ubl:schema:xsd:AcknowledgementResponseCode-1.0" xmlns:cur="urn:oasis:names:specification:ubl:schema:xsd:CurrencyCode-1.0"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-1.0"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Order-1.0 http://docs.oasis-open.org/ubl/cd-UBL-1.0/xsd/maindoc/UBL-Order-1.0.xsd">
    <BuyersID>1001</BuyersID>
    <cbc:IssueDate>2005-08-17</cbc:IssueDate>
    <cbc:Note><![CDATA[en bette bemrkningdette er en test]]></cbc:Note>
    <cbc:LineExtensionTotalAmount amountCurrencyID="DKK">500.00</cbc:LineExtensionTotalAmount>
    <cac:BuyerParty>
        <cac:Party>
            <cac:PartyIdentification>
                <cac:ID>0000000000000</cac:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <cbc:Name>Llfs test kommune</cbc:Name>
            </cac:PartyName>
            <cac:Address>
                <cbc:StreetName>En hemligvej </cbc:StreetName>
                <cbc:BuildingNumber>2</cbc:BuildingNumber>
                <cbc:CityName>KOLDING</cbc:CityName>
                <cbc:PostalZone>6000</cbc:PostalZone>
                <cac:CountrySubentityCode>DKK</cac:CountrySubentityCode>
            </cac:Address>
            <cac:Contact>
                <cbc:Name>OBI</cbc:Name>
                <cbc:Telephone/>
                <cbc:Telefax/>
                <cbc:ElectronicMail/>
            </cac:Contact>
        </cac:Party>
    </cac:BuyerParty>
    <cac:SellerParty>
        <cac:Party>
            <cac:PartyIdentification>
                <cac:ID>28216750</cac:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <cbc:Name>Ole B</cbc:Name>
            </cac:PartyName>
            <cac:Address>
                <cbc:StreetName>DRAGEBAKKEN </cbc:StreetName>
                <cbc:BuildingNumber>233</cbc:BuildingNumber>
                <cbc:CityName>ODENSE SV</cbc:CityName>
                <cbc:PostalZone>5250</cbc:PostalZone>
                <cac:CountrySubentityCode>DKK</cac:CountrySubentityCode>
            </cac:Address>
            <cac:Contact>
                <cbc:Name>OBIX A. JENSEN</cbc:Name>
                <cbc:Telephone/>
                <cbc:Telefax/>
                <cbc:ElectronicMail>obix@fiktiv.mail.com</cbc:ElectronicMail>
            </cac:Contact>
        </cac:Party>
    </cac:SellerParty>
    <cac:Delivery>
        <cbc:RequestedDeliveryDateTime>2005-08-17T00:00:00</cbc:RequestedDeliveryDateTime>
        <cac:DeliveryAddress>
            <cbc:StreetName>En hemligvej </cbc:StreetName>
            <cbc:BuildingNumber>2</cbc:BuildingNumber>
            <cbc:CityName>KOLDING</cbc:CityName>
            <cbc:PostalZone>6000</cbc:PostalZone>
            <cac:CountrySubentityCode>DKK</cac:CountrySubentityCode>
        </cac:DeliveryAddress>
    </cac:Delivery>
    <cac:OrderLine>
        <cac:LineItem>
            <cac:BuyersID>1</cac:BuyersID>
            <cbc:Quantity quantityUnitCode="stk">2.0000</cbc:Quantity>
            <cbc:LineExtensionAmount amountCurrencyID="DKK">400.00</cbc:LineExtensionAmount>
            <cbc:Note><![CDATA[Dimensionskontostreng: 1111111150]]></cbc:Note>
            <cac:Item>
                <cbc:Description>en obi vare</cbc:Description>
                <cac:SellersItemIdentification>
                    <cac:ID>obi</cac:ID>
                </cac:SellersItemIdentification>
                <cac:BasePrice>
                    <cbc:PriceAmount amountCurrencyID="DKK">200.00</cbc:PriceAmount>
                </cac:BasePrice>
            </cac:Item>
        </cac:LineItem>
    </cac:OrderLine>
    <cac:OrderLine>
        <cac:LineItem>
            <cac:BuyersID>2</cac:BuyersID>
            <cbc:Quantity quantityUnitCode="stk">1.0000</cbc:Quantity>
            <cbc:LineExtensionAmount amountCurrencyID="DKK">100.00</cbc:LineExtensionAmount>
            <cac:Item>
                <cbc:Description>en sbn vare</cbc:Description>
                <cac:SellersItemIdentification>
                    <cac:ID>sbn</cac:ID>
                </cac:SellersItemIdentification>
                <cac:BasePrice>
                    <cbc:PriceAmount amountCurrencyID="DKK">100.00</cbc:PriceAmount>
                </cac:BasePrice>
            </cac:Item>
        </cac:LineItem>
    </cac:OrderLine>
</Order>
Avatar billede obix Nybegynder
13. december 2005 - 23:02 #2
Hmm slet ingen som kan hjælpe?
Avatar billede obix Nybegynder
14. december 2005 - 13:07 #3
Nå nu har jeg ændret

JAXP_SCHEMA_SOURCE
til
"http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"

og så virker det. Nogle kommentarer eller er det ok?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester