Search in sources :

Example 6 with JAXPXPathEngine

use of org.xmlunit.xpath.JAXPXPathEngine in project mustangproject by ZUGFeRD.

the class XMLValidatorTest method testZF2XMLValidation.

public void testZF2XMLValidation() {
    // ignored for the
    // time being
    ValidationContext ctx = new ValidationContext(null);
    XMLValidator xv = new XMLValidator(ctx);
    XPathEngine xpath = new JAXPXPathEngine();
    File tempFile = getResourceAsFile("invalidV2.xml");
    Source source;
    String content;
    boolean noException = true;
    try {
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
        /*
			 * assertEquals(true, xv.getXMLResult().
			 * contains("<error location=\"/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='ApplicableHeaderTradeSettlement']/*[local-name()='SpecifiedTradeSettlementHeaderMonetarySummation']\" criterion=\"(ram:LineTotalAmount)\">\n"
			 * +
			 * "	Eine Rechnung (INVOICE) muss die Summe der Rechnungspositionen-Nettobeträge „Sum of Invoice line net amount“ (BT-106) enthalten.</error>\n"
			 * +
			 * "<error location=\"/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='ApplicableHeaderTradeSettlement']/*[local-name()='SpecifiedTradeSettlementHeaderMonetarySummation']\" criterion=\"(ram:TaxBasisTotalAmount = ram:LineTotalAmount - ram:AllowanceTotalAmount + ram:ChargeTotalAmount) or ((ram:TaxBasisTotalAmount = ram:LineTotalAmount - ram:AllowanceTotalAmount) and not (ram:ChargeTotalAmount)) or ((ram:TaxBasisTotalAmount = ram:LineTotalAmount + ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount)) or ((ram:TaxBasisTotalAmount = ram:LineTotalAmount) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))\">\n"
			 * +
			 * "	Der Inhalt des Elementes „Invoice total amount without VAT“ (BT-109) entspricht der Summe aller Inhalte der Elemente „Invoice line net amount“ (BT-131) abzüglich der Summe aller in der Rechnung enthaltenen Nachlässe der Dokumentenebene „Sum of allowances on document level“ (BT-107) zuzüglich der Summe aller in der Rechnung enthaltenen Abgaben der Dokumentenebene „Sum of charges on document level“ (BT-108).</error>\n"
			 * +
			 * "<error location=\"/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='ApplicableHeaderTradeSettlement']/*[local-name()='SpecifiedTradeSettlementHeaderMonetarySummation']\" criterion=\"(ram:GrandTotalAmount = round(ram:TaxBasisTotalAmount*100 + ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]*100 +0) div 100) or ((ram:GrandTotalAmount = ram:TaxBasisTotalAmount) and not (ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]))\">\n"
			 * +
			 * "	Der Inhalt des Elementes „Invoice total amount with VAT“ (BT-112) entspricht der Summe des Inhalts des Elementes „Invoice total amount without VAT“ (BT-109) und des Elementes „Invoice total VAT amount“ (BT-110).</error>\n"
			 * +
			 * "<error location=\"/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='ApplicableHeaderTradeSettlement']/*[local-name()='SpecifiedTradeSettlementHeaderMonetarySummation']\" criterion=\"ram:LineTotalAmount = (round(sum(../../ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount) * 10 * 10)div 100)\">\n"
			 * +
			 * "	Der Inhalt des Elementes „Sum of Invoice line net amount“ (BT-106) entspricht der Summe aller Inhalte der Elemente „Invoice line net amount“ (BT-131).</error>\n"
			 * +
			 * "<error location=\"/*[local-name()='CrossIndustryInvoice']\" criterion=\"(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name!='')\">\n"
			 * +
			 * "	Eine Rechnung (INVOICE) muss den Erwerbernamen „Buyer name“ (BT-44) enthalten.</error>\n"
			 * +
			 * "<error location=\"/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='ApplicableHeaderTradeAgreement']/*[local-name()='BuyerTradeParty']\" criterion=\"count(ram:Name)=1\">\n"
			 * + "	Das Element 'ram:Name' muss genau 1 mal auftreten.</error>\n" +
			 * "<error location=\"/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='ApplicableHeaderTradeSettlement']/*[local-name()='SpecifiedTradeSettlementHeaderMonetarySummation']\" criterion=\"count(ram:LineTotalAmount)=1\">\n"
			 * + "	Das Element 'ram:LineTotalAmount' muss genau 1 mal auftreten.</error>\n"
			 * +
			 * "<error location=\"/*[local-name()='CrossIndustryInvoice']/*[local-name()='SupplyChainTradeTransaction']/*[local-name()='IncludedSupplyChainTradeLineItem'][2]/*[local-name()='SpecifiedLineTradeDelivery']/*[local-name()='BilledQuantity']\" criterion=\"document('zugferd2p0_extended_codedb.xml')//cl[@id=7]/enumeration[@value=$codeValue7]\">\n"
			 * + "	Wert von '@unitCode' ist unzulässig.</error>\n" +
			 * "</messages><summary status='invalid'/>"));
			 *
			 */
        tempFile = getResourceAsFile("invalidV2Profile.xml");
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
    } catch (IrrecoverableValidationError e) {
        // expecting a fatal error, i.e. an exception
        noException = false;
    }
    assertFalse(noException);
    // moving on...
    noException = true;
    assertTrue(xv.getXMLResult().contains("<error type=\"25\""));
    ctx.clear();
    try {
        tempFile = getResourceAsFile("FAIL_zugferd_2p1_MINIMUM_Rechnung_380.xml");
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
    } catch (IrrecoverableValidationError e) {
        noException = false;
    }
    String res = xv.getXMLResult();
    /*OutputStream os = null;
		try {
			os = new FileOutputStream(new File("return.xml"));
			os.write(res.getBytes(), 0, res.length());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				os.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}*/
    content = "<validation>" + res + "</validation>";
    /*assertThat(content).valueByXPath("count(//error)")
				.asInt()
				.isGreaterThan(0); //1 error has to be there, 2 are OK because there is a known bug in FX/ZF


		assertThat(content).valueByXPath("//error[@type=\"4\"]")
				.asString()
				.contains(
						"In Deutschland sind die Profile MINIMUM und BASIC WL nur als Buchungshilfe (TypeCode: 751) zugelassen.");

*/
    ctx.clear();
    tempFile = getResourceAsFile("validV2Basic.xml");
    try {
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
        assertEquals(true, xv.getXMLResult().contains("valid") && !xv.getXMLResult().contains("invalid"));
        ctx.clear();
        tempFile = getResourceAsFile("ZUGFeRD-invoice_rabatte_3_abschlag_duepayableamount.xml");
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
        assertEquals(true, xv.getXMLResult().contains("valid") && !xv.getXMLResult().contains("invalid"));
        ctx.clear();
        tempFile = getResourceAsFile("valid_Avoir_FR_type380_minimum_factur-x.xml");
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
        source = Input.fromString("<validation>" + xv.getXMLResult() + "</validation>").build();
        content = xpath.evaluate("/validation/summary/@status", source);
        assertEquals("invalid", content);
        // assertEquals(true, xv.getXMLResult().contains("valid") &&
        // !xv.getXMLResult().contains("invalid"));
        /*
			 * this test failure might have to be upstreamed ctx.clear(); tempFile =
			 * getResourceAsFile(
			 * "ZUGFeRD-invoice_rabatte_4_abschlag_taxbasistotalamount.xml");
			 * xv.setFilename(tempFile.getAbsolutePath()); xv.validate(); assertEquals(true,
			 * xv.getXMLResult().contains("valid") &&
			 * !xv.getXMLResult().contains("invalid"));
			 */
        ctx.clear();
        tempFile = getResourceAsFile("attributeBasedXMP_zugferd_2p0_EN16931_Einfach_corrected.xml");
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
        assertEquals(true, xv.getXMLResult().contains("valid") && !xv.getXMLResult().contains("invalid"));
        ctx.clear();
        tempFile = getResourceAsFile("validZREtestZugferd.xml");
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
        source = Input.fromString("<validation>" + xv.getXMLResult() + "</validation>").build();
        content = xpath.evaluate("/validation/summary/@status", source);
        assertEquals("invalid", content);
    } catch (IrrecoverableValidationError e) {
        // ignore, will be in XML output anyway
        noException = false;
    }
    assertTrue(noException);
    try {
        ctx.clear();
        tempFile = getResourceAsFile("invalidV2Root.xml");
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
    } catch (IrrecoverableValidationError e) {
        // do expect this!
        noException = false;
    }
    assertFalse(noException);
    noException = true;
}
Also used : XPathEngine(org.xmlunit.xpath.XPathEngine) JAXPXPathEngine(org.xmlunit.xpath.JAXPXPathEngine) JAXPXPathEngine(org.xmlunit.xpath.JAXPXPathEngine) File(java.io.File) Source(javax.xml.transform.Source)

Example 7 with JAXPXPathEngine

use of org.xmlunit.xpath.JAXPXPathEngine in project mustangproject by ZUGFeRD.

the class XMLValidatorTest method testXRValidation.

public void testXRValidation() {
    ValidationContext ctx = new ValidationContext(null);
    XMLValidator xv = new XMLValidator(ctx);
    XPathEngine xpath = new JAXPXPathEngine();
    File tempFile = getResourceAsFile("validXRv2.xml");
    try {
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
        Source source = Input.fromString("<validation>" + xv.getXMLResult() + "</validation>").build();
        String content = xpath.evaluate("/validation/summary/@status", source);
        assertEquals("valid", content);
        tempFile = getResourceAsFile("invalidXRv2.xml");
        xv.setFilename(tempFile.getAbsolutePath());
        xv.validate();
        source = Input.fromString("<validation>" + xv.getXMLResult() + "</validation>").build();
        content = xpath.evaluate("/validation/summary/@status", source);
        assertEquals("invalid", content);
    } catch (IrrecoverableValidationError e) {
    // ignore, will be in XML output anyway
    }
}
Also used : XPathEngine(org.xmlunit.xpath.XPathEngine) JAXPXPathEngine(org.xmlunit.xpath.JAXPXPathEngine) JAXPXPathEngine(org.xmlunit.xpath.JAXPXPathEngine) File(java.io.File) Source(javax.xml.transform.Source)

Example 8 with JAXPXPathEngine

use of org.xmlunit.xpath.JAXPXPathEngine in project spring-framework by spring-projects.

the class XStreamMarshallerTests method assertXpathDoesNotExist.

private static void assertXpathDoesNotExist(String xPathExpression, String inXMLString) {
    Source source = Input.fromString(inXMLString).build();
    Iterable<Node> nodes = new JAXPXPathEngine().selectNodes(xPathExpression, source);
    assertThat(nodes).as("Should be zero matches for Xpath " + xPathExpression).isEmpty();
}
Also used : JAXPXPathEngine(org.xmlunit.xpath.JAXPXPathEngine) Node(org.w3c.dom.Node) StreamSource(javax.xml.transform.stream.StreamSource) Source(javax.xml.transform.Source)

Example 9 with JAXPXPathEngine

use of org.xmlunit.xpath.JAXPXPathEngine in project spring-framework by spring-projects.

the class XStreamMarshallerTests method assertXpathExists.

private static void assertXpathExists(String xPathExpression, String inXMLString) {
    Source source = Input.fromString(inXMLString).build();
    Iterable<Node> nodes = new JAXPXPathEngine().selectNodes(xPathExpression, source);
    assertThat(nodes).as("Expecting to find matches for Xpath " + xPathExpression).hasSizeGreaterThan(0);
}
Also used : JAXPXPathEngine(org.xmlunit.xpath.JAXPXPathEngine) Node(org.w3c.dom.Node) StreamSource(javax.xml.transform.stream.StreamSource) Source(javax.xml.transform.Source)

Example 10 with JAXPXPathEngine

use of org.xmlunit.xpath.JAXPXPathEngine in project atlasmap by atlasmap.

the class AtlasTestUtil method validateXmlOrderAttribute.

public static void validateXmlOrderAttribute(Object orderObject, int expectedOrderId) {
    assertNotNull(orderObject);
    HashMap<String, String> ns = new HashMap<>();
    ns.put("ns", "http://atlasmap.io/xml/test/v2");
    assertThat(orderObject).withNamespaceContext(ns).valueByXPath("/ns:XmlOA/@orderId").isEqualTo(expectedOrderId);
    Source source = Input.from(orderObject).build();
    JAXPXPathEngine engine = new JAXPXPathEngine();
    engine.setNamespaceContext(ns);
    Iterable<Node> addresses = engine.selectNodes("/ns:XmlOA/ns:Address", source);
    validateXmlAddressAttribute(addresses.iterator().next());
    Iterable<Node> contacts = engine.selectNodes("/ns:XmlOA/ns:Contact", source);
    validateXmlContactAttribute(contacts.iterator().next());
}
Also used : HashMap(java.util.HashMap) JAXPXPathEngine(org.xmlunit.xpath.JAXPXPathEngine) Node(org.w3c.dom.Node) Source(javax.xml.transform.Source)

Aggregations

JAXPXPathEngine (org.xmlunit.xpath.JAXPXPathEngine)13 Node (org.w3c.dom.Node)11 Source (javax.xml.transform.Source)8 File (java.io.File)7 Test (org.junit.Test)5 Input.fromFile (org.xmlunit.builder.Input.fromFile)4 Diff (org.xmlunit.diff.Diff)4 HashMap (java.util.HashMap)3 StreamSource (javax.xml.transform.stream.StreamSource)3 XPath (javax.xml.xpath.XPath)3 Document (org.w3c.dom.Document)3 NodeList (org.w3c.dom.NodeList)3 HasXPathMatcher.hasXPath (org.xmlunit.matchers.HasXPathMatcher.hasXPath)3 XPathEngine (org.xmlunit.xpath.XPathEngine)2 Project (org.commonjava.maven.ext.common.model.Project)1 XMLState (org.commonjava.maven.ext.core.state.XMLState)1 XMLIOTest (org.commonjava.maven.ext.io.XMLIOTest)1 NamedNodeMap (org.w3c.dom.NamedNodeMap)1