From 37b47f31e5daa15436c514f059a77febf1ace8a6 Mon Sep 17 00:00:00 2001 From: Christopher Derek Curry Date: Tue, 25 Apr 2017 09:57:35 +0200 Subject: [PATCH] PR for sample code ver. 1.0 (#1) --- .gitignore | 3 + .travis.yml | 2 + README.md | 181 +++++++++++++++++- build-client-keystore.sh | 44 +++++ build-client-truststore.sh | 30 +++ ie815.xml | 109 +++++++++++ p12/VOCES_gyldig.p12 | Bin 0 -> 6630 bytes p12/VOCES_spaerret.p12 | Bin 0 -> 6632 bytes p12/VOCES_udloebet.p12 | Bin 0 -> 6646 bytes pem/emcs-test-system.pem | 3 + pem/ssl-chain-0.pem | 31 +++ pem/ssl-chain-1.pem | 35 ++++ pem/ssl-chain-2.pem | 32 ++++ pem/ssl-chain-3.pem | 25 +++ pom.xml | 113 +++++++++++ .../sample/OIOLedsageDocumentOpretClient.java | 165 ++++++++++++++++ .../b2b/sample/TransactionIdGenerator.java | 33 ++++ .../emcs/b2b/sample/UTPasswordCallback.java | 71 +++++++ .../OIOLedsageDokumentOpret.wsdl | 40 ++++ .../2005/03/22/CVRnumberIdentifier.xsd | 16 ++ .../schemas/2006/09/01/AdvisIdentifikator.xsd | 15 ++ .../xml/schemas/2006/09/01/AdvisStruktur.xsd | 26 +++ .../xml/schemas/2006/09/01/AdvisTekst.xsd | 14 ++ .../schemas/2006/09/01/FejlIdentifikator.xsd | 17 ++ .../xml/schemas/2006/09/01/FejlStruktur.xsd | 25 +++ .../xml/schemas/2006/09/01/FejlTekst.xsd | 19 ++ .../schemas/2006/09/01/HovedOplysninger.xsd | 17 ++ .../2006/09/01/HovedOplysningerSvar.xsd | 48 +++++ .../2006/09/01/ServiceIdentifikator.xsd | 14 ++ .../xml/schemas/2006/09/01/SvarStruktur.xsd | 22 +++ .../2006/09/01/TransaktionIdentifikator.xsd | 28 +++ .../xml/schemas/2006/09/01/TransaktionTid.xsd | 21 ++ .../20080301/LedsagedokumentValideretDato.xsd | 10 + .../VirksomhedSENummerIdentifikator.xsd | 14 ++ ...fgiftOperatoerPunktAfgiftIdentifikator.xsd | 12 ++ .../oio/skat/emcs/1_0_1/IE917BeskedTekst.xsd | 11 ++ .../1_0_1/LedsagedokumentARCIdentifikator.xsd | 16 ++ .../oio/skat/emcs/ws/1_0_1/IE815Struktur.xsd | 15 ++ .../OIOLedsageDokumentOpretInterface.xsd | 21 ++ .../ws/1_0_1/OIOLedsageDokumentOpret_I.xsd | 22 +++ .../ws/1_0_1/OIOLedsageDokumentOpret_O.xsd | 41 ++++ .../VirksomhedIdentifikationStruktur.xsd | 27 +++ src/main/resources/emcs-policy.xml | 162 ++++++++++++++++ .../resources/etc/Client_Encrypt.properties | 6 + src/main/resources/etc/Client_Sign.properties | 10 + .../resources/keystore/client-keystore.jks | Bin 0 -> 19040 bytes .../resources/keystore/client-truststore.jks | Bin 0 -> 7930 bytes .../OIOLedsageDocumentOpretClientTest.java | 31 +++ 48 files changed, 1596 insertions(+), 1 deletion(-) create mode 100755 build-client-keystore.sh create mode 100755 build-client-truststore.sh create mode 100644 ie815.xml create mode 100644 p12/VOCES_gyldig.p12 create mode 100644 p12/VOCES_spaerret.p12 create mode 100644 p12/VOCES_udloebet.p12 create mode 100644 pem/emcs-test-system.pem create mode 100644 pem/ssl-chain-0.pem create mode 100644 pem/ssl-chain-1.pem create mode 100644 pem/ssl-chain-2.pem create mode 100644 pem/ssl-chain-3.pem create mode 100644 pom.xml create mode 100644 src/main/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClient.java create mode 100644 src/main/java/dk/skat/emcs/b2b/sample/TransactionIdGenerator.java create mode 100644 src/main/java/dk/skat/emcs/b2b/sample/UTPasswordCallback.java create mode 100755 src/main/resources/OIOLedsageDokumentOpret/OIOLedsageDokumentOpret.wsdl create mode 100755 src/main/resources/OIOLedsageDokumentOpret/cvr_dk/xml/schemas/2005/03/22/CVRnumberIdentifier.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisIdentifikator.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisStruktur.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisTekst.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlIdentifikator.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlStruktur.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlTekst.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/HovedOplysninger.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/HovedOplysningerSvar.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/ServiceIdentifikator.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/SvarStruktur.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/TransaktionIdentifikator.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/TransaktionTid.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/emcs/class/ledsagedokument/xml/schemas/20080301/LedsagedokumentValideretDato.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/skat_dk/motor/class/virksomhed/xml/schemas/20080401/VirksomhedSENummerIdentifikator.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/AfgiftOperatoerPunktAfgiftIdentifikator.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/IE917BeskedTekst.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/LedsagedokumentARCIdentifikator.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/IE815Struktur.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpretInterface.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpret_I.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpret_O.xsd create mode 100755 src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/VirksomhedIdentifikationStruktur.xsd create mode 100644 src/main/resources/emcs-policy.xml create mode 100644 src/main/resources/etc/Client_Encrypt.properties create mode 100644 src/main/resources/etc/Client_Sign.properties create mode 100644 src/main/resources/keystore/client-keystore.jks create mode 100644 src/main/resources/keystore/client-truststore.jks create mode 100644 src/test/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClientTest.java diff --git a/.gitignore b/.gitignore index f740e0f..9f27cac 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties .idea +*.iml +# Do not add: +run.sh \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index abd4127..7260e61 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,3 +10,5 @@ jdk: script: - mvn --version + # Skip unit test in CI + - mvn clean install -Dmaven.test.skip=true diff --git a/README.md b/README.md index 6ca98fa..97bc350 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,184 @@ # EMCS B2B Sample Web Service Client written in Java -[![Build Status](https://travis-ci.com/skat/emcs-b2b-sample-ws-client-java.svg?token=pXpLRS1qCgHe3KVdbFyA&branch=master)](https://travis-ci.com/skat/emcs-b2b-sample-ws-client-java) +[![Build Status](https://travis-ci.com/skat/emcs-b2b-ws-sample-client-java.svg?token=pXpLRS1qCgHe3KVdbFyA&branch=master)](https://travis-ci.com/skat/emcs-b2b-ws-sample-client-java) Sample client for the EMCS B2B Web Service Gateway developed in Java and using open source libraries. + +**IMPORTANT NOTICE**: SKAT does not provide any kind of support for the code in this repository. +This Java-client is just one example of how a B2B web service can be accessed. The client must not be +perceived as a piece of production code but more as an example one can take inspiration from and can use +to quickly get started to test whether your company can implement a successful call to one of the B2B web +service using the company's digital signature. SKAT can not be held responsible if a company uses this client +or parts of it in their own systems. + +**VIGTIG MEDDELELSE**: SKAT yder ikke support på kildekoden i nærværende kodebibliotek. +Denne Java-klient er kun et eksempel på hvordan B2B webservicene kan tilgås. Klienten skal således ikke +opfattes som et stykke produktionskode men mere som en eksempel man kan lade sig inspirere af og kan bruge +til hurtigt at komme i gang og få afprøvet om ens virksomhed kan gennemføre et succesfuldt kald til en af +B2B webservicene ved at bruge virksomhedens digitale signatur. SKAT kan ikke stå til ansvar hvis en virksomhed +anvender klienten eller dele af denne i deres egne systemer. + +## About the client + +The sample client in is implemented based on the [Apache CXF](http://cxf.apache.org/) framework, +the Spring Framework, and Java 8. See `pom.xml` file in this repo for details regarding +the current versions of the mentioned frameworks in use. + +The client currently implements calls to the service **OIOLedsageDocumentOpret** and the main entry +point into the source code of implementation is the class: + +[OIOLedsageDocumentOpretClient.java](src/main/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClient.java) + +This class constructs the request, invokes a Apache CXF generated client, and parses the response +by printing out relevant values to the log. + +## Fulfillment of WS Policy of EMCS Web Services + +The fulfillment of policies required to invoke EMCS B2B Web Services is configured in the file: + +[emcs-policy.xml](src/main/resources/emcs-policy.xml) + +Fulfillment of WS Policy requirements is achieved using CXF's in and out interceptor framework and +the `emcs-policy.xml` file details which parts are to be signed and encrypted, and how to present +certificate for authentication on the server side. This configuration file also demonstrates how +secure transport (https) is enabled client side. + +## Run client + +The sample client must be configured with two required parameters that are necessary for the client to run and +call the test environment of EMCS B2B Web Service Gateway. The two parameters can be obtained by contacting +SKAT Help Desk. + +The full list of parameters: + +* **dk.skat.emcs.b2b.sample.P12_PASSPHRASE** (REQUIRED): Passphrase to the certificate used for authentication, signing (request), and encryption (response). +* **dk.skat.emcs.b2b.sample.OIOLedsageDocumentOpret.ENDPOINT** (REQUIRED):The endpoint of the service being invoked. +* **dk.skat.emcs.b2b.sample.TXID_PREFIX** (OPTIONAL): This parameter sets a custom prefix to the generated transaction id and is very useful when asking SKAT Help Desk to trace a particular request. + +The client is then invoked as part of the **test phase** of the Maven build process that is run using the following +command line: + +```sh +$ mvn clean install \ + -Ddk.skat.emcs.b2b.sample.P12_PASSPHRASE= \ + -Ddk.skat.emcs.b2b.sample.OIOLedsageDocumentOpret.ENDPOINT= + -Ddk.skat.emcs.b2b.sample.TXID_PREFIX=ACME_01_ +``` + +The following is partial output of build and exhibits the request and response written +to the log: + +**Request**: +``` +Apr 12, 2017 11:07:23 AM dk.skat.emcs.b2b.sample.OIOLedsageDocumentOpretClient invoke +INFO: +******************************************************************* +** HovedOplysninger +**** Transaction Id: ACME_01_f57b8c74-31eb-482c-a481-966531930aea +**** Transaction Time: 2017-04-12T11:07:22.035+02:00 +** VirksomhedIdentifikationStruktur +**** AfgiftOperatoerPunktAfgiftIdentifikator: DK82065873300 +**** VirksomhedSENummerIdentifikator: 30808460 +******************************************************************* +``` + +**Response**: +``` +Apr 12, 2017 11:07:27 AM dk.skat.emcs.b2b.sample.OIOLedsageDocumentOpretClient invoke +INFO: +******************************************************************* +** HovedOplysningerSvar +**** Transaction Id: ACME_01_f57b8c74-31eb-482c-a481-966531930aea +**** Transaction Time: 2017-04-12T11:07:22.035+02:00 +**** Service Identification: FS2_OIOLedsageDokumentOpret +**** Error +****** Error Code: 494 +****** Error Text: Message identifier has been already used +******************************************************************* +``` + +In this particular output we see that the `ie815.xml` file has been sent in already. + +### Modifying the IE815 file to produce an ARC Id + +First ensure that the the following fields in the `ie815.xml` file are unique: + +* MessageIdentifier +* LocalReferenceNumber + +Then run the client again and the EMCS System will produce an ARC Identifier. + +**Sample response**: +``` +******************************************************************* +** HovedOplysningerSvar +**** Transaction Id: ACME_01_42166d20-65b5-4983-b7a2-9faec07abc54 +**** Transaction Time: 2017-04-24T13:43:52.146+02:00 +**** Service Identification: FS2_OIOLedsageDokumentOpret +Ledsagedokument Valideret Dato: 2017-04-24Z +Ledsagedokument ARC Identifikator: 17DKK1KHPMQH2W23ABI62 +******************************************************************* +``` + +## Advanced Configuration + +### Testing Expired and Revoked Certificates + +The client keystore includes three certificates: + +1. VOCES_gyldig.p12 with alias = `valid`. +2. VOCES_spaerret.p12 with alias = `revoked`. +3. VOCES_udloebet.p12 with alias = `expired`. + +By default the client is configured to run with certificate with alias `valid`. + +In order to complete a test with any of the other certificates the following files must be +changed: + +* File: **src/main/resources/etc/Client_Sign.properties** + +Change as described in the file itself: + +``` +# SKAT: Options = +# - valid (default) +# - revoked +# - expired +org.apache.ws.security.crypto.merlin.keystore.alias=revoked +``` + +File: **src/main/resources/emcs-policy.xml** + +Change as described in the file itself: + +``` + + +``` + +### Installing other OCESII Certificates in the client keystore + +The keystore `src/main/resources/keystore/client-keystore.jks` is already prepared with the +necessary test certificate that is authorized to access the test environment. However, in the +event that another test certificate has been issued this may be installed as follows: + +``` +$ export P12_PASSPHRASE=CHANGE_ME +$ export P12_CURRENT_ALIAS=CHANGE_ME +$ keytool -delete -alias valid -keystore src/main/resources/keystore/client-keystore.jks -storepass storepassword +$ keytool -changealias -keystore target/VOCES_yours.p12 -storepass $P12_PASSPHRASE -alias $P12_CURRENT_ALIAS -destalias "valid" +$ keytool -v -importkeystore -srckeystore target/VOCES_yours.p12 -srcstoretype PKCS12 -destkeystore src/main/resources/keystore/client-keystore.jks -deststoretype JKS -deststorepass storepassword -srcstorepass $P12_PASSPHRASE +``` + +Where `P12_PASSPHRASE` and `P12_CURRENT_ALIAS` are passphrase and alias of the OCESII certificate, +respectively. The three keytool command removes the pre configured certificate, changes the the alias +of the new certificate, and finally imports it into the keystore. + +## References + +* [Apache CXF](http://cxf.apache.org/) +* [Apache CXF Samples](https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples) diff --git a/build-client-keystore.sh b/build-client-keystore.sh new file mode 100755 index 0000000..53908ad --- /dev/null +++ b/build-client-keystore.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +CLIENT_KEYSTORE=src/main/resources/keystore/client-keystore.jks + +P12_PASSPHRASE=$1 + +echo "Provided p12 passphrase: $P12_PASSPHRASE" + +echo "Before import ..." +keytool -list -keystore $CLIENT_KEYSTORE -storepass storepassword + +echo "Importing ..." + +# Build target for processing p12 files before import +mkdir -p target +cp -r p12/*.p12 target + +# Import valid test certificate: VOCES_gyldig.p12 +# ----------------------------------------------- +# Change alias (not required by client) +keytool -changealias -keystore target/VOCES_gyldig.p12 -storepass $P12_PASSPHRASE -alias "nets danid a/s - tu voces gyldig" -destalias "valid" +keytool -v -importkeystore -srckeystore target/VOCES_gyldig.p12 -srcstoretype PKCS12 -destkeystore $CLIENT_KEYSTORE -deststoretype JKS -deststorepass storepassword -srcstorepass $P12_PASSPHRASE + +# Import revoked test certificate: VOCES_spaerret.p12 +# -------------------------------------------------- +# Change alias (required by client) +keytool -changealias -keystore target/VOCES_spaerret.p12 -storepass $P12_PASSPHRASE -alias "nets danid a/s - tu voces spærret" -destalias "revoked" +keytool -v -importkeystore -srckeystore target/VOCES_spaerret.p12 -srcstoretype PKCS12 -destkeystore $CLIENT_KEYSTORE -deststoretype JKS -deststorepass storepassword -srcstorepass $P12_PASSPHRASE + +# Import expired test certificate: VOCES_udloebet.p12 +# -------------------------------------------------- +# Change alias (required by client) +keytool -changealias -keystore target/VOCES_udloebet.p12 -storepass $P12_PASSPHRASE -alias "nets danid a/s - udløbet premexp1d1h" -destalias "expired" +keytool -v -importkeystore -srckeystore target/VOCES_udloebet.p12 -srcstoretype PKCS12 -destkeystore $CLIENT_KEYSTORE -deststoretype JKS -deststorepass storepassword -srcstorepass $P12_PASSPHRASE + +echo "After import ..." +keytool -list -keystore $CLIENT_KEYSTORE -storepass storepassword + +### Reverse imports +### NOT ACTIVE +# keytool -delete -alias valid -keystore src/main/resources/keystore/client-keystore.jks -storepass storepassword +# keytool -delete -alias revoked -keystore src/main/resources/keystore/client-keystore.jks -storepass storepassword +# keytool -delete -alias expired -keystore src/main/resources/keystore/client-keystore.jks -storepass storepassword + diff --git a/build-client-truststore.sh b/build-client-truststore.sh new file mode 100755 index 0000000..61c7cb1 --- /dev/null +++ b/build-client-truststore.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +CLIENT_TUSTSTORE=src/main/resources/keystore/client-truststore.jks + +echo "Before import ..." +keytool -list -keystore $CLIENT_TUSTSTORE -storepass storepassword + +echo "Importing ..." + +keytool -noprompt -import -alias skatserver -file pem/emcs-test-system.pem -keystore $CLIENT_TUSTSTORE -storepass storepassword + +# Import SSL cert for secure transport (https://..) +# The full cert. chain is viewable with openssl command: openssl s_client -connect host:port -showcerts +# +keytool -noprompt -import -alias ssl_chain_0 -file pem/ssl-chain-0.pem -keystore $CLIENT_TUSTSTORE -storepass storepassword +# Level 0 is sufficient for completeness we import the full chain (level 1,2,3)... +keytool -noprompt -import -alias ssl_chain_1 -file pem/ssl-chain-1.pem -keystore $CLIENT_TUSTSTORE -storepass storepassword +keytool -noprompt -import -alias ssl_chain_2 -file pem/ssl-chain-2.pem -keystore $CLIENT_TUSTSTORE -storepass storepassword +keytool -noprompt -import -alias ssl_chain_3 -file pem/ssl-chain-3.pem -keystore $CLIENT_TUSTSTORE -storepass storepassword + +echo "After import ..." +keytool -list -keystore $CLIENT_TUSTSTORE -storepass storepassword + +### Reverse imports +### NOT ACTIVE +# keytool -delete -alias skatserver -keystore src/main/resources/keystore/client-truststore.jks -storepass storepassword +# keytool -delete -alias ssl_chain_0 -keystore src/main/resources/keystore/client-truststore.jks -storepass storepassword +# keytool -delete -alias ssl_chain_1 -keystore src/main/resources/keystore/client-truststore.jks -storepass storepassword +# keytool -delete -alias ssl_chain_2 -keystore src/main/resources/keystore/client-truststore.jks -storepass storepassword +# keytool -delete -alias ssl_chain_3 -keystore src/main/resources/keystore/client-truststore.jks -storepass storepassword diff --git a/ie815.xml b/ie815.xml new file mode 100644 index 0000000..1904fda --- /dev/null +++ b/ie815.xml @@ -0,0 +1,109 @@ + + + + NDEA.DK + NDEA.DK + 2011-10-26 + 11:23:00.803 + 9e1e74a5-aaae-41d6-8280-c3892246e694 + + + + + 1 + + 1 + + + DK99025875300 + SEED selskab 1 test 2 + Kirkegade + 1 + 6840 + Oksbøl + + + DK82065873300 + Test af KS-1, testsitnr. 3.1.3.22 + Borupvej + 1 + 3320 + Skævinge + + + DK82065873309 + Test af KS-1, testsitnr. 3.1.3.22 + Borupvej + 9 + 3320 + Skævinge + + + DK99025875499 + SEED selskab 1 test 2 + Statshavnen + 6 + 3000 + Helsingør + + + DK008047 + + + TC10 + Lufthavnsvej + 8 + 2800 + Roskilde + + + 1 + H06 + 1 + + + 4 + + + 1 + + + 1 + W200 + 22042122 + 100 + 100 + 99 + 12 + Nix + 1 + Tjo + 4000000 + Nix + BB + + BJ + 10 + + + 2 + 1 + jajaja + + + + 1562594 + INV026594 + 2011-10-18 + 1 + 2011-10-26 + 02:00:00.814 + + + 1 + 299 + + + + diff --git a/p12/VOCES_gyldig.p12 b/p12/VOCES_gyldig.p12 new file mode 100644 index 0000000000000000000000000000000000000000..f9fbd161270c0ac3ac4295cf6ec73b34aa689ced GIT binary patch literal 6630 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 BQ1bu) literal 0 HcmV?d00001 diff --git a/p12/VOCES_spaerret.p12 b/p12/VOCES_spaerret.p12 new file mode 100644 index 0000000000000000000000000000000000000000..2a189edf75b8f2dba6842373e83a115020e469a3 GIT binary patch literal 6632 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 literal 0 HcmV?d00001 diff --git a/p12/VOCES_udloebet.p12 b/p12/VOCES_udloebet.p12 new file mode 100644 index 0000000000000000000000000000000000000000..8af58e1ad6a30788188d96d2f7a2ed37bf3820cb GIT binary patch literal 6646 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 MWOe;*tpNc41zN3SmH+?% literal 0 HcmV?d00001 diff --git a/pem/emcs-test-system.pem b/pem/emcs-test-system.pem new file mode 100644 index 0000000..066cee3 --- /dev/null +++ b/pem/emcs-test-system.pem @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/pem/ssl-chain-0.pem b/pem/ssl-chain-0.pem new file mode 100644 index 0000000..ff039c2 --- /dev/null +++ b/pem/ssl-chain-0.pem @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFZTCCBE2gAwIBAgIQXPzSoID5xbWfA5Ng5Q5rhzANBgkqhkiG9w0BAQsFADCB +kDELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxNjA0BgNV +BAMTLUNPTU9ETyBSU0EgRG9tYWluIFZhbGlkYXRpb24gU2VjdXJlIFNlcnZlciBD +QTAeFw0xNDExMjEwMDAwMDBaFw0xNzEyMDkyMzU5NTlaMHkxITAfBgNVBAsTGERv +bWFpbiBDb250cm9sIFZhbGlkYXRlZDEiMCAGA1UECxMZSG9zdGVkIGJ5IENTQyBE +YW5tYXJrIEEvUzEcMBoGA1UECxMTQ09NT0RPIFNTTCBXaWxkY2FyZDESMBAGA1UE +AxQJKi5za2F0LmRrMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnMqJ +hI4QfjEoY8GZ7GR5Intb3QZbUnLZ7ekwFff2u2fZALEok2aTIsQu6+HpAaKucCW5 +g3QZe27yEl7sQExE/zYru1a0TyWGQgx7s3bLjTqysi3mSFL8uMxX6q7ZqJqzkcKY +D8YaTYlXnaU5H0yLR8z7M0Z7louG9ALCmq+02IdDSijTi8zhjfdk0aSPpIainJ/k +XdoP7Y/ksFJaf5ghCsE7ldaPqgNFxRLDcWab5mlLUdqmxdteK9dcJQfJdjC0+bTr +aHi4Ik1tI5lQpitxsyGtNIycBPBIMJiRd84dnAC304kHG9vhyMTgrPHnozcvWpLi +rvb20bGfbJiQKztqHQIDAQABo4IBzzCCAcswHwYDVR0jBBgwFoAUkK9qOpRaC9iQ +6hJWc99DtDoo2ucwHQYDVR0OBBYEFKUvqzlHZ76WA7kcfJ+etNLZ5lMIMA4GA1Ud +DwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr +BgEFBQcDAjBPBgNVHSAESDBGMDoGCysGAQQBsjEBAgIHMCswKQYIKwYBBQUHAgEW +HWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMAgGBmeBDAECATBUBgNVHR8E +TTBLMEmgR6BFhkNodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9SU0FEb21h +aW5WYWxpZGF0aW9uU2VjdXJlU2VydmVyQ0EuY3JsMIGFBggrBgEFBQcBAQR5MHcw +TwYIKwYBBQUHMAKGQ2h0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET1JTQURv +bWFpblZhbGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0 +dHA6Ly9vY3NwLmNvbW9kb2NhLmNvbTAdBgNVHREEFjAUggkqLnNrYXQuZGuCB3Nr +YXQuZGswDQYJKoZIhvcNAQELBQADggEBAGrrtRB2r12Ap6rakDvbkZKgQziirVg9 +zozlNeeYYDPcPPuCrFgJ8CEQnurC7pcKMdcSBqViYL7AfHCwlEDbNmvsz8fEY+Cl +sR01HzPz3OJq3x21aVJzJy2gUX8QgvkvZkMGKYbEpSC1F3IUc/nEJJvfGBFPQQf9 +acTp9aQcxUs+0V+VdbSK2ks1mLvr+qml0dm/8e/rCYxALMJREpYQH4eQZuTUD/hJ +44WvhLHQAc/aLHmaGIwZOcMLU3+cap7qcVznjC1XC0ZQ9rgLqER4boewtT7XnSs6 +ONNJH+H2UwoESE6X1wtfB02xwI5uX/f3x/btIm7DsJVaUXTavnqPwX4= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/pem/ssl-chain-1.pem b/pem/ssl-chain-1.pem new file mode 100644 index 0000000..d81d72a --- /dev/null +++ b/pem/ssl-chain-1.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwMjEy +MDAwMDAwWhcNMjkwMjExMjM1OTU5WjCBkDELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBSU0EgRG9tYWluIFZh +bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAI7CAhnhoFmk6zg1jSz9AdDTScBkxwtiBUUWOqigwAwCfx3M28Sh +bXcDow+G+eMGnD4LgYqbSRutA776S9uMIO3Vzl5ljj4Nr0zCsLdFXlIvNN5IJGS0 +Qa4Al/e+Z96e0HqnU4A7fK31llVvl0cKfIWLIpeNs4TgllfQcBhglo/uLQeTnaG6 +ytHNe+nEKpooIZFNb5JPJaXyejXdJtxGpdCsWTWM/06RQ1A/WZMebFEh7lgUq/51 +UHg+TLAchhP6a5i84DuUHoVS3AOTJBhuyydRReZw3iVDpA3hSqXttn7IzW3uLh0n +c13cRTCAquOyQQuvvUSH2rnlG51/ruWFgqUCAwEAAaOCAWUwggFhMB8GA1UdIwQY +MBaAFLuvfgI9+qbxPISOre44mOzZMjLUMB0GA1UdDgQWBBSQr2o6lFoL2JDqElZz +30O0Oija5zAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV +HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGwYDVR0gBBQwEjAGBgRVHSAAMAgG +BmeBDAECATBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNvbW9kb2NhLmNv +bS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggrBgEFBQcB +AQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9E +T1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21v +ZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAE4rdk+SHGI2ibp3wScF9BzWRJ2p +mj6q1WZmAT7qSeaiNbz69t2Vjpk1mA42GHWx3d1Qcnyu3HeIzg/3kCDKo2cuH1Z/ +e+FE6kKVxF0NAVBGFfKBiVlsit2M8RKhjTpCipj4SzR7JzsItG8kO3KdY3RYPBps +P0/HEZrIqPW1N+8QRcZs2eBelSaz662jue5/DJpmNXMyYE7l3YphLG5SEXdoltMY +dVEVABt0iN3hxzgEQyjpFv3ZBdRdRydg1vs4O2xyopT4Qhrf7W8GjEXCBgCq5Ojc +2bXhc3js9iPc0d1sjhqPpepUfJa3w/5Vjo1JXvxku88+vZbrac2/4EjxYoIQ5QxG +V/Iz2tDIY+3GH5QFlkoakdH368+PUq4NCNk+qKBR6cGHdNXJ93SrLlP7u3r7l+L4 +HyaPs9Kg4DdbKDsx5Q5XLVq4rXmsXiBmGqW5prU5wfWYQ//u+aen/e7KJD2AFsQX +j4rBYKEMrltDR5FL1ZoXX/nUh8HCjLfn4g8wGTeGrODcQgPmlKidrv0PJFGUzpII +0fxQ8ANAe4hZ7Q7drNJ3gjTcBpUC2JD5Leo31Rpg0Gcg19hCC0Wvgmje3WYkN5Ap +lBlGGSW4gNfL1IYoakRwJiNiqZ+Gb7+6kHDSVneFeO/qJakXzlByjAA6quPbYzSf ++AZxAeKCINT+b72x +-----END CERTIFICATE----- diff --git a/pem/ssl-chain-2.pem b/pem/ssl-chain-2.pem new file mode 100644 index 0000000..80b05dc --- /dev/null +++ b/pem/ssl-chain-2.pem @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIIFdDCCBFygAwIBAgIQJ2buVutJ846r13Ci/ITeIjANBgkqhkiG9w0BAQwFADBv +MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk +ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF +eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow +gYUxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO +BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSswKQYD +VQQDEyJDT01PRE8gUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkq +hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkehUktIKVrGsDSTdxc9EZ3SZKzejfSNw +AHG8U9/E+ioSj0t/EFa9n3Byt2F/yUsPF6c947AEYe7/EZfH9IY+Cvo+XPmT5jR6 +2RRr55yzhaCCenavcZDX7P0N+pxs+t+wgvQUfvm+xKYvT3+Zf7X8Z0NyvQwA1onr +ayzT7Y+YHBSrfuXjbvzYqOSSJNpDa2K4Vf3qwbxstovzDo2a5JtsaZn4eEgwRdWt +4Q08RWD8MpZRJ7xnw8outmvqRsfHIKCxH2XeSAi6pE6p8oNGN4Tr6MyBSENnTnIq +m1y9TBsoilwie7SrmNnu4FGDwwlGTm0+mfqVF9p8M1dBPI1R7Qu2XK8sYxrfV8g/ +vOldxJuvRZnio1oktLqpVj3Pb6r/SVi+8Kj/9Lit6Tf7urj0Czr56ENCHonYhMsT +8dm74YlguIwoVqwUHZwK53Hrzw7dPamWoUi9PPevtQ0iTMARgexWO/bTouJbt7IE +IlKVgJNp6I5MZfGRAy1wdALqi2cVKWlSArvX31BqVUa/oKMoYX9w0MOiqiwhqkfO +KJwGRXa/ghgntNWutMtQ5mv0TIZxMOmm3xaG4Nj/QN370EKIf6MzOi5cHkERgWPO +GHFrK+ymircxXDpqR+DDeVnWIBqv8mqYqnK8V0rSS527EPywTEHl7R09XiidnMy/ +s1Hap0flhFMCAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73g +JMtUGjAdBgNVHQ4EFgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQD +AgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9 +MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVy +bmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6 +Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAGS/g/FfmoXQ +zbihKVcN6Fr30ek+8nYEbvFScLsePP9NDXRqzIGCJdPDoCpdTPW6i6FtxFQJdcfj +Jw5dhHk3QBN39bSsHNA7qxcS1u80GH4r6XnTq1dFDK8o+tDb5VCViLvfhVdpfZLY +Uspzgb8c8+a4bmYRBbMelC1/kZWSWfFMzqORcUx8Rww7Cxn2obFshj5cqsQugsv5 +B5a6SE2Q8pTIqXOi6wZ7I53eovNNVZ96YUWYGGjHXkBrI/V5eu+MtWuLt29G9Hvx +PUsE2JOAWVrgQSQdso8VYFhH2+9uRv0V9dlfmrPb2LjkQLPNlzmuhbsdjrzch5vR +pu/xO28QOG8= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/pem/ssl-chain-3.pem b/pem/ssl-chain-3.pem new file mode 100644 index 0000000..cf8f0da --- /dev/null +++ b/pem/ssl-chain-3.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a2880c4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,113 @@ + + 4.0.0 + dk.skat.emcs.b2b.sample + emcs-b2b-ws-sample-client-java + jar + 1.0 + emcs-b2b-ws-sample-client-java + http://www.skat.dk/emcs + + 3.1.9 + 4.1.9.RELEASE + + + + org.apache.cxf + cxf-rt-frontend-jaxws + ${cxf.version} + + + org.apache.cxf + cxf-rt-transports-http + ${cxf.version} + + + org.apache.cxf + cxf-rt-transports-http-jetty + ${cxf.version} + + + org.apache.cxf + cxf-rt-ws-security + ${cxf.version} + + + org.apache.cxf + cxf-rt-ws-policy + ${cxf.version} + + + org.springframework + spring-core + ${cxf.spring.version} + + + org.springframework + spring-beans + ${cxf.spring.version} + + + org.springframework + spring-context + ${cxf.spring.version} + + + org.slf4j + jcl-over-slf4j + 1.7.22 + + + junit + junit + 4.12 + test + + + + + + + org.apache.cxf + cxf-codegen-plugin + 3.1.9 + + + generate-sources + generate-sources + + ${project.build.directory}/generated/cxf + + + ${basedir}/src/main/resources/OIOLedsageDokumentOpret/OIOLedsageDokumentOpret.wsdl + + + + + wsdl2java + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + add-source + generate-sources + + add-source + + + + target/generated/cxf + + + + + + + + diff --git a/src/main/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClient.java b/src/main/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClient.java new file mode 100644 index 0000000..5b985c3 --- /dev/null +++ b/src/main/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClient.java @@ -0,0 +1,165 @@ +package dk.skat.emcs.b2b.sample; + +import dk.oio.rep.skat_dk.basis.kontekst.xml.schemas._2006._09._01.AdvisStrukturType; +import dk.oio.rep.skat_dk.basis.kontekst.xml.schemas._2006._09._01.FejlStrukturType; +import dk.oio.rep.skat_dk.basis.kontekst.xml.schemas._2006._09._01.HovedOplysningerType; +import oio.skat.emcs.ws._1_0.IE815StrukturType; +import oio.skat.emcs.ws._1_0.OIOLedsageDokumentOpretIType; +import oio.skat.emcs.ws._1_0.OIOLedsageDokumentOpretOType; +import oio.skat.emcs.ws._1_0.VirksomhedIdentifikationStrukturType; +import oio.skat.emcs.ws._1_0_1.OIOLedsageDokumentOpretService; +import oio.skat.emcs.ws._1_0_1.OIOLedsageDokumentOpretServicePortType; +import oio.skat.emcs.ws._1_0.VirksomhedIdentifikationStrukturType.Indberetter; +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; +import org.apache.cxf.bus.spring.SpringBusFactory; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.ws.BindingProvider; +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.logging.Logger; + +/** + * OIOLedsageDocumentOpretClient + * + * @author SKAT + * @since 1.0 + */ +@SuppressWarnings("ALL") +public class OIOLedsageDocumentOpretClient { + + private static final Logger LOGGER = Logger.getLogger(OIOLedsageDocumentOpretClient.class.getName()); + + private String endpointURL; + + /** + * Private constructor + */ + private OIOLedsageDocumentOpretClient() { + } + + /** + * Constructor + * + * @param endpointURL Endpoint of OIOLedsageDocumentOpret service + */ + public OIOLedsageDocumentOpretClient(String endpointURL) { + this.endpointURL = endpointURL; + } + + /** + * Call OIOLedsageDocumentOpret service + * + * @param virksomhedSENummerIdentifikator VAT number of entity calling entity + * @param afgiftOperatoerPunktAfgiftIdentifikator Excise Number of calling entity + * @param ie815 IE815 document file path. + * @throws DatatypeConfigurationException N/A + * @throws ParserConfigurationException N/A + * @throws IOException N/A + * @throws SAXException N/A + */ + public void invoke(String virksomhedSENummerIdentifikator, + String afgiftOperatoerPunktAfgiftIdentifikator, + String ie815) throws DatatypeConfigurationException, ParserConfigurationException, IOException, SAXException { + + final String newLine = System.getProperty("line.separator"); + + // Generate Transaction Id + final String transactionID = TransactionIdGenerator.getTransactionId(); + + // Generate Transaction Time + GregorianCalendar gregorianCalendar = new GregorianCalendar(); + gregorianCalendar.setTime(new Date()); + XMLGregorianCalendar transactionTime = DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar); + + // Build HovedOplysninger Object and set transaction id and time + HovedOplysningerType hovedOplysningerType = new HovedOplysningerType(); + hovedOplysningerType.setTransaktionIdentifikator(transactionID); + hovedOplysningerType.setTransaktionTid(transactionTime); + + // Build VirksomhedIdentifikationStruktur + VirksomhedIdentifikationStrukturType virksomhedIdentifikationStrukturType = new VirksomhedIdentifikationStrukturType(); + virksomhedIdentifikationStrukturType.setAfgiftOperatoerPunktAfgiftIdentifikator(afgiftOperatoerPunktAfgiftIdentifikator); + Indberetter indberetter = new Indberetter(); + indberetter.setVirksomhedSENummerIdentifikator(virksomhedSENummerIdentifikator); + virksomhedIdentifikationStrukturType.setIndberetter(indberetter); + + // Load IE815 document + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + File file = new File(ie815); + Document doc = db.parse(file); + + // Build IE815StrukturType + IE815StrukturType ie815StrukturType = new IE815StrukturType(); + // Set ie815 document + ie815StrukturType.setAny(doc.getDocumentElement()); + + OIOLedsageDokumentOpretIType oioLedsageDokumentOpretIType = new OIOLedsageDokumentOpretIType(); + oioLedsageDokumentOpretIType.setHovedOplysninger(hovedOplysningerType); + oioLedsageDokumentOpretIType.setVirksomhedIdentifikationStruktur(virksomhedIdentifikationStrukturType); + oioLedsageDokumentOpretIType.setIE815Struktur(ie815StrukturType); + + Bus bus = new SpringBusFactory().createBus("emcs-policy.xml", false); + BusFactory.setDefaultBus(bus); + + OIOLedsageDokumentOpretService service = new OIOLedsageDokumentOpretService(); + OIOLedsageDokumentOpretServicePortType port = service.getOIOLedsageDokumentOpretServicePort(); + + // Set endpoint of service. + BindingProvider bp = (BindingProvider)port; + bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, this.endpointURL); + + StringBuilder sbRequest = new StringBuilder(); + sbRequest.append("*******************************************************************").append(newLine); + sbRequest.append("** HovedOplysninger").append(newLine); + sbRequest.append("**** Transaction Id: ").append(oioLedsageDokumentOpretIType.getHovedOplysninger().getTransaktionIdentifikator()).append(newLine); + sbRequest.append("**** Transaction Time: ").append(oioLedsageDokumentOpretIType.getHovedOplysninger().getTransaktionTid()).append(newLine); + sbRequest.append("** VirksomhedIdentifikationStruktur").append(newLine); + sbRequest.append("**** AfgiftOperatoerPunktAfgiftIdentifikator: ").append(oioLedsageDokumentOpretIType.getVirksomhedIdentifikationStruktur().getAfgiftOperatoerPunktAfgiftIdentifikator()).append(newLine); + sbRequest.append("**** VirksomhedSENummerIdentifikator: ").append(oioLedsageDokumentOpretIType.getVirksomhedIdentifikationStruktur().getIndberetter().getVirksomhedSENummerIdentifikator()).append(newLine); + sbRequest.append("*******************************************************************").append(newLine); + LOGGER.info(newLine + sbRequest.toString()); + + + OIOLedsageDokumentOpretOType out = port.getOIOLedsageDokumentOpret(oioLedsageDokumentOpretIType); + StringBuilder sb = new StringBuilder(); + sb.append("*******************************************************************").append(newLine); + sb.append("** HovedOplysningerSvar").append(newLine); + sb.append("**** Transaction Id: ").append(out.getHovedOplysningerSvar().getTransaktionIdentifikator()).append(newLine); + sb.append("**** Transaction Time: ").append(out.getHovedOplysningerSvar().getTransaktionTid()).append(newLine); + sb.append("**** Service Identification: ").append(out.getHovedOplysningerSvar().getServiceIdentifikator()).append(newLine); + if (out.getHovedOplysningerSvar().getSvarStruktur().getAdvisStrukturOrFejlStruktur().size() > 0) { + for (Object errorOrAdvis : out.getHovedOplysningerSvar().getSvarStruktur().getAdvisStrukturOrFejlStruktur()) { + if (errorOrAdvis instanceof FejlStrukturType) { + FejlStrukturType fejlStrukturType = (FejlStrukturType) errorOrAdvis; + sb.append("**** Error").append(newLine); + sb.append("****** Error Code: ").append(fejlStrukturType.getFejlIdentifikator()).append(newLine); + sb.append("****** Error Text: ").append(fejlStrukturType.getFejlTekst()).append(newLine); + } + if (errorOrAdvis instanceof AdvisStrukturType) { + AdvisStrukturType advisStrukturType = (AdvisStrukturType) errorOrAdvis; + sb.append("**** Advis").append(newLine); + sb.append("****** Advis Code: ").append(advisStrukturType.getAdvisIdentifikator()).append(newLine); + sb.append("****** Advis Text: ").append(advisStrukturType.getAdvisTekst()).append(newLine); + } + } + } else { + sb.append("Ledsagedokument Valideret Dato: ").append(out.getOutput().getLedsageDokument().getLedsagedokumentValideretDato().toString()).append(newLine); + sb.append("Ledsagedokument ARC Identifikator: ").append(out.getOutput().getLedsageDokument().getLedsagedokumentARCIdentifikator()).append(newLine); + } + sb.append("*******************************************************************").append(newLine); + + LOGGER.info(newLine + sb.toString()); + } + +} diff --git a/src/main/java/dk/skat/emcs/b2b/sample/TransactionIdGenerator.java b/src/main/java/dk/skat/emcs/b2b/sample/TransactionIdGenerator.java new file mode 100644 index 0000000..d38d76c --- /dev/null +++ b/src/main/java/dk/skat/emcs/b2b/sample/TransactionIdGenerator.java @@ -0,0 +1,33 @@ +package dk.skat.emcs.b2b.sample; + +import java.util.UUID; + +/** + * TransactionIdGenerator + * + * @author SKAT + * @since 1.0 + */ +public class TransactionIdGenerator { + + /** + * Generate transaction id. + * + * If JVM parameter -Ddk.skat.emcs.b2b.sample.TXID_PREFIX=SOMETHING has been set generated transaction + * id will be prefix with 'SOMETHING'. This feature is designed to make + * diagnostics server side easier when searching the logs. + * + * @return Transaction id (possible prefixed) + */ + public static final String getTransactionId() { + final String prefix = System.getProperty("dk.skat.emcs.b2b.sample.TXID_PREFIX"); + String transactionId = UUID.randomUUID().toString(); + if (prefix != null) { + transactionId = prefix + transactionId; + } + return transactionId; + } + + private TransactionIdGenerator() { + } +} diff --git a/src/main/java/dk/skat/emcs/b2b/sample/UTPasswordCallback.java b/src/main/java/dk/skat/emcs/b2b/sample/UTPasswordCallback.java new file mode 100644 index 0000000..2dfd84e --- /dev/null +++ b/src/main/java/dk/skat/emcs/b2b/sample/UTPasswordCallback.java @@ -0,0 +1,71 @@ +/** + * 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 dk.skat.emcs.b2b.sample; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.UnsupportedCallbackException; + +import org.apache.wss4j.common.ext.WSPasswordCallback; + +/** + * UTPasswordCallback + * + * @author SKAT + * @since 1.0 + */ +public class UTPasswordCallback implements CallbackHandler { + + private Map passwords = + new HashMap(); + + public UTPasswordCallback() { + String P12_PASSPHRASE = System.getProperty("dk.skat.emcs.b2b.sample.P12_PASSPHRASE"); + passwords.put("valid", P12_PASSPHRASE); + passwords.put("revoked", P12_PASSPHRASE); + passwords.put("expired", P12_PASSPHRASE); + } + + /** + * Here, we attempt to get the password from the private + * alias/passwords map. + */ + public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { + for (int i = 0; i < callbacks.length; i++) { + WSPasswordCallback pc = (WSPasswordCallback) callbacks[i]; + + String pass = passwords.get(pc.getIdentifier()); + if (pass != null) { + pc.setPassword(pass); + return; + } + } + } + + /** + * Add an alias/password pair to the callback mechanism. + */ + public void setAliasPassword(String alias, String password) { + passwords.put(alias, password); + } +} diff --git a/src/main/resources/OIOLedsageDokumentOpret/OIOLedsageDokumentOpret.wsdl b/src/main/resources/OIOLedsageDokumentOpret/OIOLedsageDokumentOpret.wsdl new file mode 100755 index 0000000..0a048c3 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/OIOLedsageDokumentOpret.wsdl @@ -0,0 +1,40 @@ + + + + OIO-udgave af tilsvarende forretningsservice. Sætter eksterne afsendere i stand til at sende et nyt ledsagedokument til validering. Servicen returnere ARC-nummeret samt valideringsdatoen på det elektroniske ledsagedokument. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/OIOLedsageDokumentOpret/cvr_dk/xml/schemas/2005/03/22/CVRnumberIdentifier.xsd b/src/main/resources/OIOLedsageDokumentOpret/cvr_dk/xml/schemas/2005/03/22/CVRnumberIdentifier.xsd new file mode 100755 index 0000000..33981b4 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/cvr_dk/xml/schemas/2005/03/22/CVRnumberIdentifier.xsd @@ -0,0 +1,16 @@ + + + + + Unique and generally usable identifier for + all legal units included i CVR. + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisIdentifikator.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisIdentifikator.xsd new file mode 100755 index 0000000..2ea454f --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisIdentifikator.xsd @@ -0,0 +1,15 @@ + + + + + + Element til at identificere en + forretningsmæssig advis fra et servicekald. Elementet er + typisk en kode hvis aktuelle betydning er en del af + beskrivelsen af funktionaliteten for den enkelte service. + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisStruktur.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisStruktur.xsd new file mode 100755 index 0000000..3f73de8 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisStruktur.xsd @@ -0,0 +1,26 @@ + + + + + + + Et dokumentfragment med denne struktur + beskriver en enkelt forretningsmæssig advisering i + svaret fra en webservice. Adviseringen består i en + identifikator for advisen samt en advisbeskrivelse der + kan have specifikt forretningsmæssigt indhold. De + forventelige værdierne i denne struktur er en del af + kontrakten for de enkelte services som AdvisStruktur + indgår i. + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisTekst.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisTekst.xsd new file mode 100755 index 0000000..79d45cf --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/AdvisTekst.xsd @@ -0,0 +1,14 @@ + + + + + + Element til at beskrive en + forretningsmæssig advis fra et servicekald. Indholdet er + typisk en tekst der beskriver en advarsel fra en service. + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlIdentifikator.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlIdentifikator.xsd new file mode 100755 index 0000000..737e245 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlIdentifikator.xsd @@ -0,0 +1,17 @@ + + + + + Element til at identificere en + forretningsmæssig fejl fra et servicekald. Elementet er + typisk en kode hvis aktuelle betydning er en del af + beskrivelsen af funktionaliteten for den enkelte service. + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlStruktur.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlStruktur.xsd new file mode 100755 index 0000000..cf30c46 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlStruktur.xsd @@ -0,0 +1,25 @@ + + + + + + + Et dokumentfragment med denne struktur + beskriver en enkelt forretningsmæssig fejl i svaret fra + en webservice. Fejlen består i en identifikator for + fejlen samt en fejlbeskrivelse der kan have specifikt + forretningsmæssigt indhold. De forventelige værdierne i + denne struktur er en del af kontrakten for de enkelte + services som FejlStruktur indgår i. + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlTekst.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlTekst.xsd new file mode 100755 index 0000000..fccdd20 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/FejlTekst.xsd @@ -0,0 +1,19 @@ + + + + + Element til at beskrive en + forretningsmæssig fejl fra et servicekald. Indholdet er + typisk en tekst der beskriver en forretningsmæssig fejl + opstået i en service. + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/HovedOplysninger.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/HovedOplysninger.xsd new file mode 100755 index 0000000..c95c0ac --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/HovedOplysninger.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/HovedOplysningerSvar.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/HovedOplysningerSvar.xsd new file mode 100755 index 0000000..adcaff9 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/HovedOplysningerSvar.xsd @@ -0,0 +1,48 @@ + + + + Strukturen er en generisk svarmekanisme til at + udveksle forretningsmæssige fejl og adviser med et + modsvarende system. Strukturen forudsætter ikke nogen + servicespecifk viden, udover at navnet på den konkrete + service skal stå i feltet ServiceIndikator. De fejl og + adviser der rapporteres med strukturen skal betragtes som + unikt identificeret af + ServiceIdentifikator+FejlIdentifikator henholdsvis + ServiceIdentifikator+AdvisIdentifikator. Herved kan + forskellige services benytte overlappende serier af + identifikatorer og stadigvæk være unikt identificeret. + + + + + + + + + Strukturen er en generisk svarmekanisme + til at udveksle forretningsmæssige fejl og adviser med + et modsvarende system. Strukturen forudsætter ikke + nogen servicespecifk viden, udover at navnet på den + konkrete service skal stå i feltet ServiceIndikator. De + fejl og adviser der rapporteres med strukturen skal + betragtes som unikt identificeret af + ServiceIdentifikator+FejlIdentifikator henholdsvis + ServiceIdentifikator+AdvisIdentifikator. Herved kan + forskellige services benytte overlappende serier af + identifikatorer og stadigvæk være unikt identificeret. + + + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/ServiceIdentifikator.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/ServiceIdentifikator.xsd new file mode 100755 index 0000000..663c70b --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/ServiceIdentifikator.xsd @@ -0,0 +1,14 @@ + + + + + Element til at identificere den service + der svarer. Dens værdi skal antage navnet på den service + der svarer. + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/SvarStruktur.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/SvarStruktur.xsd new file mode 100755 index 0000000..a53230b --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/SvarStruktur.xsd @@ -0,0 +1,22 @@ + + + + + + + Valg mellem et antal forretningsmæssige + adviser og fejl der kan returneres fra en service. Der + kan rapporteres et ubegrænset antal af begge dele i en + vilkårlig orden. + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/TransaktionIdentifikator.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/TransaktionIdentifikator.xsd new file mode 100755 index 0000000..530c2ea --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/TransaktionIdentifikator.xsd @@ -0,0 +1,28 @@ + + + + + Felt der giver kalder af service mulighed + for at binde sit eget transaktionsspor sammen med den + kaldte webservice. Når brug af dette felt understøttes + af en service, så vil værdier af en + TransaktionIdentifikator der gives ved et kald af + service blive returneret ved svar fra samme service. Der + er ikke nogen bindinger på hvordan + TransaktionsIdentifikatoren skal udformes, men det er + hensigten at det kaldende system selv skal administrere + anvendelsen af unikke identifikationer af sine kald, så + svar kan matches til kald. + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/TransaktionTid.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/TransaktionTid.xsd new file mode 100755 index 0000000..b1280d2 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/basis/kontekst/xml/schemas/2006/09/01/TransaktionTid.xsd @@ -0,0 +1,21 @@ + + + + + Felt der giver kalder af service mulighed + for at tidsstemple sit eget transaktionsspor uafhængigt + af kaldte systems interne tid. Når brug af dette felt + understøttes af en service, så vil værdier af en + TransaktionTid der gives ved et kald af service blive + returneret ved svar fra samme service. Der er ikke nogen + bindinger på hvordan TransaktionTid skal udformes, + udover at det er et xs:dateTime, men det er hensigten at + det kaldende system kan anvende tidsstempel til hurtigt + at kunne udsøge servicekald i egne loggingmekanismer. + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/emcs/class/ledsagedokument/xml/schemas/20080301/LedsagedokumentValideretDato.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/emcs/class/ledsagedokument/xml/schemas/20080301/LedsagedokumentValideretDato.xsd new file mode 100755 index 0000000..242f40c --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/emcs/class/ledsagedokument/xml/schemas/20080301/LedsagedokumentValideretDato.xsd @@ -0,0 +1,10 @@ + + + + + Dato hvor ledsagedokumentet er valideret. + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/skat_dk/motor/class/virksomhed/xml/schemas/20080401/VirksomhedSENummerIdentifikator.xsd b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/motor/class/virksomhed/xml/schemas/20080401/VirksomhedSENummerIdentifikator.xsd new file mode 100755 index 0000000..3592e79 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/skat_dk/motor/class/virksomhed/xml/schemas/20080401/VirksomhedSENummerIdentifikator.xsd @@ -0,0 +1,14 @@ + + + + + + 8-cifret nummer, der entydigt identificerer + en registreret virksomhed i SKAT. Indhold: 8-cifret + nummer, der entydigt identificerer en registreret + virksomhed i SKAT. + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/AfgiftOperatoerPunktAfgiftIdentifikator.xsd b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/AfgiftOperatoerPunktAfgiftIdentifikator.xsd new file mode 100755 index 0000000..5fa5280 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/AfgiftOperatoerPunktAfgiftIdentifikator.xsd @@ -0,0 +1,12 @@ + + + + + Benyttes til at entydigt identificere en + EU virksomhed eller en midlertidigt registreret virksomhed. + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/IE917BeskedTekst.xsd b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/IE917BeskedTekst.xsd new file mode 100755 index 0000000..8d453c5 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/IE917BeskedTekst.xsd @@ -0,0 +1,11 @@ + + + + + IE 917 Message repræsenteret som tekst + (EN: IE message as text) + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/LedsagedokumentARCIdentifikator.xsd b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/LedsagedokumentARCIdentifikator.xsd new file mode 100755 index 0000000..9abcec7 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/1_0_1/LedsagedokumentARCIdentifikator.xsd @@ -0,0 +1,16 @@ + + + + + En entydig kode som identificerer et + elektronisk ledsagedokument (ARC = Administrative + Reference Code) Indhold: Nummeret er opbygget af + årstal, fx "05", landekode "DK", en + unik kode på 16 karakterer, samt en kontrol kode på et + tal. + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/IE815Struktur.xsd b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/IE815Struktur.xsd new file mode 100755 index 0000000..8a4798b --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/IE815Struktur.xsd @@ -0,0 +1,15 @@ + + + + IE815 Message struktur + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpretInterface.xsd b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpretInterface.xsd new file mode 100755 index 0000000..eeeb6cf --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpretInterface.xsd @@ -0,0 +1,21 @@ + + + + OIO-udgave af tilsvarende forretningsservice. + Sætter eksterne afsendere i stand til at sende et nyt + ledsagedokument til validering. Servicen returnere + ARC-nummeret samt valideringsdatoen på det elektroniske ledsagedokument. + + + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpret_I.xsd b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpret_I.xsd new file mode 100755 index 0000000..2c4e060 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpret_I.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpret_O.xsd b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpret_O.xsd new file mode 100755 index 0000000..d0267d4 --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/OIOLedsageDokumentOpret_O.xsd @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/VirksomhedIdentifikationStruktur.xsd b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/VirksomhedIdentifikationStruktur.xsd new file mode 100755 index 0000000..b3907bc --- /dev/null +++ b/src/main/resources/OIOLedsageDokumentOpret/urn/oio/skat/emcs/ws/1_0_1/VirksomhedIdentifikationStruktur.xsd @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/emcs-policy.xml b/src/main/resources/emcs-policy.xml new file mode 100644 index 0000000..abe7e11 --- /dev/null +++ b/src/main/resources/emcs-policy.xml @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + .*_EXPORT_.* + .*_EXPORT1024_.* + .*_WITH_DES_.* + .*_WITH_AES_.* + .*_WITH_NULL_.* + .*_DH_anon_.* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/etc/Client_Encrypt.properties b/src/main/resources/etc/Client_Encrypt.properties new file mode 100644 index 0000000..54badfe --- /dev/null +++ b/src/main/resources/etc/Client_Encrypt.properties @@ -0,0 +1,6 @@ +org.apache.ws.security.crypto.provider=org.apache.wss4j.common.crypto.Merlin +org.apache.ws.security.crypto.merlin.keystore.type=jks +org.apache.ws.security.crypto.merlin.keystore.password=storepassword +# SKAT: This is the certificate used for the encryption: +org.apache.ws.security.crypto.merlin.keystore.alias=skatserver +org.apache.ws.security.crypto.merlin.keystore.file=keystore/client-truststore.jks diff --git a/src/main/resources/etc/Client_Sign.properties b/src/main/resources/etc/Client_Sign.properties new file mode 100644 index 0000000..edabb49 --- /dev/null +++ b/src/main/resources/etc/Client_Sign.properties @@ -0,0 +1,10 @@ +org.apache.ws.security.crypto.provider=org.apache.wss4j.common.crypto.Merlin +org.apache.ws.security.crypto.merlin.keystore.type=jks +org.apache.ws.security.crypto.merlin.keystore.password=storepassword +# SKAT: Options = +# - valid (default) +# - revoked +# - expired +org.apache.ws.security.crypto.merlin.keystore.alias=valid +org.apache.ws.security.crypto.merlin.keystore.file=keystore/client-keystore.jks + diff --git a/src/main/resources/keystore/client-keystore.jks b/src/main/resources/keystore/client-keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..2fa296c617762775fb31be8eaf5e6c1898536aee GIT binary patch literal 19040 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/keystore/client-truststore.jks b/src/main/resources/keystore/client-truststore.jks new file mode 100644 index 0000000000000000000000000000000000000000..c3dcd8e16e709e92c51c1b8dd454ef0c82001ef0 GIT binary patch literal 7930 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 literal 0 HcmV?d00001 diff --git a/src/test/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClientTest.java b/src/test/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClientTest.java new file mode 100644 index 0000000..c9594fb --- /dev/null +++ b/src/test/java/dk/skat/emcs/b2b/sample/OIOLedsageDocumentOpretClientTest.java @@ -0,0 +1,31 @@ +package dk.skat.emcs.b2b.sample; + +import org.junit.Test; + +/** + * OIOLedsageDocumentOpretClient Test + * + * @author SKAT + * @since 1.0 + */ +public class OIOLedsageDocumentOpretClientTest { + + @Test + public void invoke() throws Exception { + String endpointURL = + System.getProperty("dk.skat.emcs.b2b.sample.OIOLedsageDocumentOpret.ENDPOINT"); + + // Path to where the IE815 document is located + String ie815 = "ie815.xml"; + // VAT Number of the entity sending. Rule of thumb: this number matches + // this CVR number present in the certificate. + String virksomhedSENummerIdentifikator = "30808460"; + // Excise number + String afgiftOperatoerPunktAfgiftIdentifikator = "DK82065873300"; + + OIOLedsageDocumentOpretClient oioLedsageDocumentClient = new OIOLedsageDocumentOpretClient(endpointURL); + oioLedsageDocumentClient.invoke(virksomhedSENummerIdentifikator, + afgiftOperatoerPunktAfgiftIdentifikator, ie815); + } + +} \ No newline at end of file