From 7dfa917fe9b05fa5e67da225e1f6315847cd06ac Mon Sep 17 00:00:00 2001 From: Carlos Esteban Feria Vila <2582866+carlosthe19916@users.noreply.github.com> Date: Mon, 7 Dec 2020 09:41:05 +0100 Subject: [PATCH] Update xbuilder quickstart --- xbuilder-quickstart/README.md | 4 +- .../{UBLDefaults.java => ConfigDefaults.java} | 2 +- ...figSingleton.java => ConfigSingleton.java} | 29 ++---- .../xbuilder/DefaultSystemClock.java | 36 +++++++ .../openubl/quickstart/xbuilder/Main.java | 93 ++++++++----------- 5 files changed, 89 insertions(+), 75 deletions(-) rename xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/{UBLDefaults.java => ConfigDefaults.java} (97%) rename xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/{UBLConfigSingleton.java => ConfigSingleton.java} (63%) create mode 100644 xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/DefaultSystemClock.java diff --git a/xbuilder-quickstart/README.md b/xbuilder-quickstart/README.md index ba3e633..934f2a6 100644 --- a/xbuilder-quickstart/README.md +++ b/xbuilder-quickstart/README.md @@ -1 +1,3 @@ -Execute Main.java +## XBuilder quickstart + +Ejemplo sobre como usar XBuilder para crear y firmar comprobantes electrónicos. El presente ejemplo solo require que ejecutes la clase Main.java en cualquier IDE y ver el resultado que se imprime en la consola. diff --git a/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/UBLDefaults.java b/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/ConfigDefaults.java similarity index 97% rename from xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/UBLDefaults.java rename to xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/ConfigDefaults.java index 43b025e..029bb27 100644 --- a/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/UBLDefaults.java +++ b/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/ConfigDefaults.java @@ -23,7 +23,7 @@ import java.math.BigDecimal; -public class UBLDefaults implements Config { +public class ConfigDefaults implements Config { private BigDecimal igv = new BigDecimal("0.18"); private BigDecimal ivap = new BigDecimal("0.04"); private String defaultMoneda = "PEN"; diff --git a/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/UBLConfigSingleton.java b/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/ConfigSingleton.java similarity index 63% rename from xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/UBLConfigSingleton.java rename to xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/ConfigSingleton.java index 2b02cd0..b448fe7 100644 --- a/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/UBLConfigSingleton.java +++ b/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/ConfigSingleton.java @@ -19,36 +19,23 @@ import io.github.project.openubl.xmlbuilderlib.clock.SystemClock; import io.github.project.openubl.xmlbuilderlib.config.Config; -import java.util.Calendar; -import java.util.TimeZone; +public class ConfigSingleton { -public class UBLConfigSingleton { - - private static UBLConfigSingleton instance; + private static ConfigSingleton instance; private Config config; private SystemClock clock; - private UBLConfigSingleton() { - config = new UBLDefaults(); - clock = new SystemClock() { - @Override - public TimeZone getTimeZone() { - return TimeZone.getTimeZone("America/Lima"); - } - - @Override - public Calendar getCalendarInstance() { - return Calendar.getInstance(); - } - }; + private ConfigSingleton() { + config = new ConfigDefaults(); + clock = new DefaultSystemClock(); } - public static UBLConfigSingleton getInstance() { + public static ConfigSingleton getInstance() { if (instance == null) { - synchronized (UBLConfigSingleton.class) { + synchronized (ConfigSingleton.class) { if (instance == null) { - instance = new UBLConfigSingleton(); + instance = new ConfigSingleton(); } } } diff --git a/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/DefaultSystemClock.java b/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/DefaultSystemClock.java new file mode 100644 index 0000000..681a3b0 --- /dev/null +++ b/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/DefaultSystemClock.java @@ -0,0 +1,36 @@ +/** + * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + *
+ * Licensed under the Eclipse Public License - v 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 + *
+ * https://www.eclipse.org/legal/epl-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 io.github.project.openubl.quickstart.xbuilder; + +import io.github.project.openubl.xmlbuilderlib.clock.SystemClock; + +import java.util.Calendar; +import java.util.TimeZone; + +public class DefaultSystemClock implements SystemClock { + + @Override + public TimeZone getTimeZone() { + return TimeZone.getTimeZone("America/Lima"); + } + + @Override + public Calendar getCalendarInstance() { + return Calendar.getInstance(); + } + +} diff --git a/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/Main.java b/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/Main.java index 3422e41..5f690bc 100644 --- a/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/Main.java +++ b/xbuilder-quickstart/src/main/java/io/github/project/openubl/quickstart/xbuilder/Main.java @@ -1,13 +1,13 @@ /** * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. - * + *
* Licensed under the Eclipse Public License - v 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 - * + *
* https://www.eclipse.org/legal/epl-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.
@@ -31,28 +31,53 @@
import io.github.project.openubl.xmlbuilderlib.xml.XMLSigner;
import io.github.project.openubl.xmlbuilderlib.xml.XmlSignatureHelper;
import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-import javax.xml.crypto.MarshalException;
-import javax.xml.crypto.dsig.XMLSignatureException;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.io.IOException;
import java.io.InputStream;
-import java.io.StringWriter;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.security.*;
-import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Arrays;
-import java.util.Base64;
public class Main {
+
+ public static void main(String[] args) throws Exception {
+ // Create XML
+ String xml = createUnsignedXML();
+
+ System.out.println("Your XML is:");
+ System.out.println(xml);
+
+ // Sign XML
+ Document signedXML = signXML(xml);
+
+ byte[] bytesFromDocument = XmlSignatureHelper.getBytesFromDocument(signedXML);
+ String signedXMLString = new String(bytesFromDocument, StandardCharsets.ISO_8859_1);
+
+ System.out.println("\n Your signed XML is:");
+ System.out.println(signedXMLString);
+ }
+
+ public static String createUnsignedXML() {
+ // General config
+ Config config = ConfigSingleton.getInstance().getConfig();
+ SystemClock clock = ConfigSingleton.getInstance().getClock();
+
+ // Invoice generation
+ InvoiceInputModel input = invoiceFactory();
+ DocumentWrapper