Skip to content

Commit 2e7c502

Browse files
Merge pull request #67 from xdev-software/openapi-client
Openapi client
2 parents 9305fef + 016c36f commit 2e7c502

33 files changed

+3297
-367
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# 2.0.0
22

33
* Now supports the CESOP-Format (and the DAC7-Format).
4+
* Uses a client that is auto generated by OpenAPI. This makes the library more robust for future changes of the API.
45

56
# 1.0.3
67

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@ Client for using the [Mass data transmission DIP (mass data interface)](https://
1212

1313
The BZSt (Bundeszentralamt für Steuern / Federal Central Tax Office) provides the Digital Inbox (DIP) as a service for payment service providers to transmit financial data.
1414

15-
Clients need to register / login at [BZSt online.portal](https://www.bzst.de/DE/Service/Portalinformation/Massendaten/DIP/dip.html?nn=68828) through [Elster](https://www.elster.de/elsterweb/start), [BundID](https://id.bund.de/de) or [BZSt Online-Portal (BOP)](https://www.elster.de/bportal/start).
15+
This library uses a [generated](./bzst-dip-java-client/pom.xml) client from an [``openapi.yml``](./openapi/openapi.yml)
16+
using [OpenAPI Generator](https://openapi-generator.tech/).
17+
18+
Clients need to register / login
19+
at [BZSt online.portal](https://www.bzst.de/DE/Service/Portalinformation/Massendaten/DIP/dip.html?nn=68828)
20+
through [Elster](https://www.elster.de/elsterweb/start), [BundID](https://id.bund.de/de)
21+
or [BZSt Online-Portal (BOP)](https://www.elster.de/bportal/start).
1622

1723
See the [BZSt Information](https://www.bzst.de/EN/Service/Portalinformation/Login/login_node.html) for more information.
1824

bzst-dip-java-client-demo/src/main/java/software/xdev/ApplicationWithCesop.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.slf4j.LoggerFactory;
1515

1616
import software.xdev.bzst.dip.client.BzstDipClient;
17-
import software.xdev.bzst.dip.client.exception.HttpStatusCodeNotExceptedException;
1817
import software.xdev.bzst.dip.client.model.configuration.BzstDipConfiguration;
1918
import software.xdev.bzst.dip.client.model.configuration.BzstDipConfigurationBuilder;
2019
import software.xdev.bzst.dip.client.model.configuration.BzstDipOecdDocType;
@@ -57,7 +56,7 @@ public final class ApplicationWithCesop
5756
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationWithCesop.class);
5857

5958
public static void main(final String[] args)
60-
throws InterruptedException, HttpStatusCodeNotExceptedException, IOException, DatatypeConfigurationException
59+
throws InterruptedException, IOException, DatatypeConfigurationException
6160
{
6261
final BzstDipConfiguration configuration = createConfiguration();
6362
final BzstDipClient bzstDipClient = new BzstDipClient(configuration);

bzst-dip-java-client-demo/src/main/java/software/xdev/ApplicationWithConfigurationFromProperties.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.slf4j.LoggerFactory;
77

88
import software.xdev.bzst.dip.client.BzstDipClient;
9-
import software.xdev.bzst.dip.client.exception.HttpStatusCodeNotExceptedException;
109
import software.xdev.bzst.dip.client.model.configuration.BzstDipConfiguration;
1110
import software.xdev.bzst.dip.client.model.configuration.BzstDipConfigurationBuilder;
1211
import software.xdev.bzst.dip.client.model.configuration.PropertiesSupplier;
@@ -19,7 +18,7 @@ public final class ApplicationWithConfigurationFromProperties
1918
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationWithConfigurationFromProperties.class);
2019

2120
public static void main(final String[] args)
22-
throws InterruptedException, HttpStatusCodeNotExceptedException, IOException
21+
throws InterruptedException, IOException
2322
{
2423
final BzstDipConfiguration configuration = createConfigurationFromProperties();
2524
final BzstDipClient bzstDipClient = new BzstDipClient(configuration);

bzst-dip-java-client-demo/src/main/java/software/xdev/ApplicationWithCsvInput.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@
99
import org.slf4j.Logger;
1010
import org.slf4j.LoggerFactory;
1111

12-
import com.opencsv.exceptions.CsvValidationException;
13-
1412
import software.xdev.bzst.dip.client.BzstDipClient;
15-
import software.xdev.bzst.dip.client.exception.HttpStatusCodeNotExceptedException;
1613
import software.xdev.bzst.dip.client.model.configuration.BzstDipConfiguration;
1714
import software.xdev.bzst.dip.client.model.message.dac7.BzstDipCompleteResult;
1815

@@ -23,7 +20,7 @@ public final class ApplicationWithCsvInput
2320
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationWithCsvInput.class);
2421

2522
public static void main(final String[] args)
26-
throws InterruptedException, HttpStatusCodeNotExceptedException, IOException, CsvValidationException
23+
throws InterruptedException, IOException
2724
{
2825
final BzstDipConfiguration configuration = ApplicationWithDac7.createConfiguration();
2926

bzst-dip-java-client-demo/src/main/java/software/xdev/ApplicationWithDac7.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.slf4j.LoggerFactory;
1010

1111
import software.xdev.bzst.dip.client.BzstDipClient;
12-
import software.xdev.bzst.dip.client.exception.HttpStatusCodeNotExceptedException;
1312
import software.xdev.bzst.dip.client.model.configuration.BzstDipConfiguration;
1413
import software.xdev.bzst.dip.client.model.configuration.BzstDipConfigurationBuilder;
1514
import software.xdev.bzst.dip.client.model.configuration.BzstDipDpiMessageType;
@@ -35,7 +34,7 @@ public final class ApplicationWithDac7
3534
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationWithDac7.class);
3635

3736
public static void main(final String[] args)
38-
throws InterruptedException, HttpStatusCodeNotExceptedException, IOException
37+
throws InterruptedException, IOException
3938
{
4039
final BzstDipConfiguration configuration = createConfiguration();
4140
final BzstDipClient bzstDipClient = new BzstDipClient(configuration);

bzst-dip-java-client-demo/src/main/resources/app.properties

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
client.id=abcd1234-ab12-ab12-ab12-abcdef123456
22
base.url=https://mds-ktst.bzst.bund.de
33
environment=TEST
4-
5-
tax.id=123456781011
4+
tax.id=86095742719
65
tax.number=123456781011
76
application.code=
87

bzst-dip-java-client/pom.xml

Lines changed: 203 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@
5050

5151
<jjwt.version>0.12.6</jjwt.version>
5252
<jackson.version>2.17.1</jackson.version>
53+
54+
<generatedDirRelative>src/generated/java</generatedDirRelative>
55+
56+
<!-- Ignore generated code -->
57+
<sonar.exclusions>
58+
src/generated/**
59+
</sonar.exclusions>
5360
</properties>
5461

5562
<repositories>
@@ -112,6 +119,22 @@
112119
<artifactId>jackson-dataformat-xml</artifactId>
113120
<version>${jackson.version}</version>
114121
</dependency>
122+
<dependency>
123+
<groupId>com.fasterxml.jackson.datatype</groupId>
124+
<artifactId>jackson-datatype-jsr310</artifactId>
125+
<version>${jackson.version}</version>
126+
</dependency>
127+
<!-- HTTP client: apache client -->
128+
<dependency>
129+
<groupId>org.apache.httpcomponents.client5</groupId>
130+
<artifactId>httpclient5</artifactId>
131+
<version>5.3.1</version>
132+
</dependency>
133+
<dependency>
134+
<groupId>org.openapitools</groupId>
135+
<artifactId>jackson-databind-nullable</artifactId>
136+
<version>0.2.6</version>
137+
</dependency>
115138
<dependency>
116139
<groupId>org.slf4j</groupId>
117140
<artifactId>slf4j-api</artifactId>
@@ -254,6 +277,24 @@
254277
</execution>
255278
</executions>
256279
</plugin>
280+
<plugin>
281+
<groupId>org.codehaus.mojo</groupId>
282+
<artifactId>build-helper-maven-plugin</artifactId>
283+
<version>3.5.0</version>
284+
<executions>
285+
<execution>
286+
<phase>generate-sources</phase>
287+
<goals>
288+
<goal>add-source</goal>
289+
</goals>
290+
<configuration>
291+
<sources>
292+
<source>${generatedDirRelative}</source>
293+
</sources>
294+
</configuration>
295+
</execution>
296+
</executions>
297+
</plugin>
257298
</plugins>
258299
</build>
259300
<profiles>
@@ -349,11 +390,169 @@
349390
</build>
350391
</profile>
351392
<profile>
352-
<id>pmd</id>
393+
<id>openapi-generator</id>
394+
<properties>
395+
<componentDir>bzst/dip/client/generated</componentDir>
396+
<componentPackage>bzst.dip.client.generated</componentPackage>
397+
398+
<generatedDir>${project.basedir}/${generatedDirRelative}</generatedDir>
399+
<openApiRelativeGeneratorDir>src/gen</openApiRelativeGeneratorDir>
400+
<openApiGeneratorDir>
401+
${project.basedir}/target/generated-sources/openapi/${openApiRelativeGeneratorDir}
402+
</openApiGeneratorDir>
403+
</properties>
353404
<build>
354405
<plugins>
355406
<plugin>
356407
<groupId>org.apache.maven.plugins</groupId>
408+
<artifactId>maven-clean-plugin</artifactId>
409+
<version>3.3.2</version>
410+
<executions>
411+
<execution>
412+
<id>pre-generation-clean</id>
413+
<phase>initialize</phase>
414+
<goals>
415+
<goal>clean</goal>
416+
</goals>
417+
<configuration>
418+
<excludeDefaultDirectories>true</excludeDefaultDirectories>
419+
<filesets>
420+
<fileset>
421+
<directory>${generatedDir}</directory>
422+
</fileset>
423+
</filesets>
424+
</configuration>
425+
</execution>
426+
<execution>
427+
<id>post-generation-clean</id>
428+
<phase>process-resources</phase>
429+
<goals>
430+
<goal>clean</goal>
431+
</goals>
432+
</execution>
433+
</executions>
434+
</plugin>
435+
<plugin>
436+
<groupId>org.openapitools</groupId>
437+
<artifactId>openapi-generator-maven-plugin</artifactId>
438+
<version>7.5.0</version>
439+
<executions>
440+
<execution>
441+
<goals>
442+
<goal>generate</goal>
443+
</goals>
444+
<configuration>
445+
<inputSpec>${project.basedir}/../openapi/openapi.yml</inputSpec>
446+
<generatorName>java</generatorName>
447+
<configOptions>
448+
<sourceFolder>${openApiRelativeGeneratorDir}</sourceFolder>
449+
<library>apache-httpclient</library>
450+
<apiPackage>software.xdev.${componentPackage}.api</apiPackage>
451+
<modelPackage>software.xdev.${componentPackage}.model</modelPackage>
452+
<invokerPackage>software.xdev.${componentPackage}.client</invokerPackage>
453+
<!-- Otherwise throw and catch everywhere -->
454+
<useRuntimeException>true</useRuntimeException>
455+
<!-- Some fields of API have been ignored because they are unused -->
456+
<disallowAdditionalPropertiesIfNotPresent>false
457+
</disallowAdditionalPropertiesIfNotPresent>
458+
<!-- Use newer Jakarta EE instead of Javax -->
459+
<useJakartaEe>true</useJakartaEe>
460+
<hideGenerationTimestamp>true</hideGenerationTimestamp>
461+
</configOptions>
462+
<!-- No tests and documentation because we don't use that -->
463+
<generateModelTests>false</generateModelTests>
464+
<generateApiTests>false</generateApiTests>
465+
<generateModelDocumentation>false</generateModelDocumentation>
466+
<generateApiDocumentation>false</generateApiDocumentation>
467+
</configuration>
468+
</execution>
469+
</executions>
470+
</plugin>
471+
<plugin>
472+
<groupId>org.apache.maven.plugins</groupId>
473+
<artifactId>maven-resources-plugin</artifactId>
474+
<version>3.3.1</version>
475+
<executions>
476+
<execution>
477+
<id>copy-generated-resources</id>
478+
<phase>process-sources</phase>
479+
<goals>
480+
<goal>copy-resources</goal>
481+
</goals>
482+
<configuration>
483+
<outputDirectory>${generatedDir}</outputDirectory>
484+
<resources>
485+
<resource>
486+
<directory>${openApiGeneratorDir}</directory>
487+
</resource>
488+
</resources>
489+
</configuration>
490+
</execution>
491+
</executions>
492+
</plugin>
493+
<plugin>
494+
<groupId>software.xdev</groupId>
495+
<artifactId>find-and-replace-maven-plugin</artifactId>
496+
<version>1.0.3</version>
497+
<executions>
498+
<execution>
499+
<!-- Remove so that we don't need additional dependency -->
500+
<id>remove-unused-import-com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider</id>
501+
<phase>process-sources</phase>
502+
<goals>
503+
<goal>file-contents</goal>
504+
</goals>
505+
<configuration>
506+
<baseDir>${generatedDirRelative}/software/xdev/${componentDir}/client/</baseDir>
507+
<fileMask>ApiClient.java</fileMask>
508+
<!-- @formatter:off DO NOT INTRODUCE LINE BREAK -->
509+
<findRegex>^import com\.fasterxml\.jackson\.jaxrs\.json\.JacksonJsonProvider;(\r?\n)</findRegex>
510+
<!-- @formatter:on -->
511+
<replaceLineBased>false</replaceLineBased>
512+
</configuration>
513+
</execution>
514+
<execution>
515+
<!-- Changes with each generator version -->
516+
<id>remove-generated-annotation</id>
517+
<phase>process-sources</phase>
518+
<goals>
519+
<goal>file-contents</goal>
520+
</goals>
521+
<configuration>
522+
<baseDir>${generatedDirRelative}/software/xdev/${componentDir}/</baseDir>
523+
<recursive>true</recursive>
524+
<fileMask>.java</fileMask>
525+
<findRegex>^@jakarta\.annotation\.Generated.*(\r?\n)</findRegex>
526+
<replaceAll>false</replaceAll>
527+
<replaceLineBased>false</replaceLineBased>
528+
</configuration>
529+
</execution>
530+
<execution>
531+
<!-- Requiring Java serialization indicates a serious misuse of the API -->
532+
<id>remove-serialVersionUID</id>
533+
<phase>process-sources</phase>
534+
<goals>
535+
<goal>file-contents</goal>
536+
</goals>
537+
<configuration>
538+
<baseDir>${generatedDirRelative}/software/xdev/${componentDir}/</baseDir>
539+
<recursive>true</recursive>
540+
<fileMask>.java</fileMask>
541+
<findRegex>^.*serialVersionUID.*(\r?\n)(\s*\r?\n)?</findRegex>
542+
<replaceAll>false</replaceAll>
543+
<replaceLineBased>false</replaceLineBased>
544+
</configuration>
545+
</execution>
546+
</executions>
547+
</plugin>
548+
</plugins>
549+
</build>
550+
</profile>
551+
<profile>
552+
<id>pmd</id>
553+
<build>
554+
<plugins>
555+
<plugin>
357556
<artifactId>maven-pmd-plugin</artifactId>
358557
<version>3.26.0</version>
359558
<configuration>
@@ -362,6 +561,9 @@
362561
<rulesets>
363562
<ruleset>../.config/pmd/ruleset.xml</ruleset>
364563
</rulesets>
564+
<excludes>
565+
<exclude>**/generated/**/*.java</exclude>
566+
</excludes>
365567
</configuration>
366568
<dependencies>
367569
<dependency>

0 commit comments

Comments
 (0)