Merged in improvements (pull request #1)

Improvements
This commit is contained in:
Mark Nellemann 2019-10-25 15:00:29 +00:00
commit 007eac2965
2 changed files with 89 additions and 76 deletions

View File

@ -19,87 +19,96 @@
package biz.nellemann.libcvrapi;
import java.io.IOException;
import biz.nellemann.libcvrapi.pojo.Company;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
public class CvrApi {
private final static Logger log = LoggerFactory.getLogger(CvrApi.class);
private final OkHttpClient client;
private static final Logger log = LoggerFactory.getLogger(CvrApi.class);
private final OkHttpClient client = new OkHttpClient();
private final String userAgent;
private final String authenticationToken;
private final String userAgent;
private final String authenticationToken;
protected String baseUrl = "https://rest.cvrapi.dk/v1/dk";
private final String BASE_URL;
public CvrApi(String userAgent, String authenticationToken) {
this.userAgent = userAgent;
this.authenticationToken = authenticationToken;
client = new OkHttpClient();
}
public CvrApi(String userAgent, String authenticationToken) {
this(userAgent, authenticationToken, null);
}
public CvrApi(String userAgent, String authenticationToken, String baseUrl) {
this.userAgent = userAgent;
this.authenticationToken = authenticationToken;
if(baseUrl == null) {
this.BASE_URL = "https://rest.cvrapi.dk/v1/dk";
} else {
this.BASE_URL = baseUrl;
}
}
protected String get(String url) throws IOException, Exception {
protected String get(String url) throws Exception {
String credential = Credentials.basic(authenticationToken, "");
String credential = Credentials.basic(authenticationToken, "");
Request request = new Request.Builder().url(url).header("User-Agent", userAgent)
.header("Authorization", credential).addHeader("Accept", "application/json;").build();
Request request = new Request
.Builder()
.url(url)
.header("User-Agent", userAgent)
.header("Authorization", credential)
.addHeader("Accept", "application/json;")
.build();
Response response = client.newCall(request).execute();
switch (response.code()) {
case 200:
return response.body().string();
case 401:
log.warn("get() - 401 - Access Denied");
throw new Exception("Access Denied");
Response response = client.newCall(request).execute();
switch (response.code()) {
case 200:
return response.body().string();
case 401:
log.warn("get() - 401 - Access Denied");
throw new Exception("Access Denied");
case 404:
log.warn("get() - 404 - Not Found");
throw new Exception("Not Found");
default:
throw new Exception("get() - Unknown Error - status code: " + response.code());
}
}
default:
throw new Exception("get() - Unknown Error - status code: " + response.code());
}
}
/**
* Query the API: https://rest.cvrapi.dk/v1/dk/company/vatNumber
*
* @param vatNumber
* @return
* @throws IOException
*/
protected String getCompanyJson(String vatNumber) throws IOException, Exception {
String response = get(baseUrl + "/company/" + vatNumber);
log.debug("getCompanyJson() response: " + response);
return response;
}
/**
* Query the API: https://rest.cvrapi.dk/v1/dk/company/vatNumber
*
* @param vatNumber
* @return
* @throws IOException
*/
protected String getCompanyJson(String vatNumber) throws Exception {
String response = get(BASE_URL + "/company/" + vatNumber);
log.debug("getCompanyJson() response: {}", response);
return response;
}
/**
* Use GSON to deserialize JSON into POJO's.
*
* @param json
* @return
*/
protected Company parseJsonIntoCompany(String json) throws JsonSyntaxException {
Gson gson = new Gson();
Company company = gson.fromJson(json, Company.class);
return company;
}
/**
* Use GSON to deserialize JSON into POJO's.
*
* @param json
* @return
*/
protected Company parseJsonIntoCompany(String json) {
Gson gson = new Gson();
return gson.fromJson(json, Company.class);
}
/**
@ -108,22 +117,22 @@ public class CvrApi {
* @param vatNumber
* @return
*/
public Company getCompanyByVatNumber(String vatNumber) {
public Company getCompanyByVatNumber(String vatNumber) {
try {
String json = getCompanyJson(vatNumber);
return parseJsonIntoCompany(json);
try {
String json = getCompanyJson(vatNumber);
return parseJsonIntoCompany(json);
} catch (JsonSyntaxException e) {
log.error("Error parsing JSON", e);
return null;
} catch (IOException e) {
log.error("IO Error", e);
return null;
} catch (Exception e) {
log.error("Unknown Error", e);
return null;
}
return null;
} catch (IOException e) {
log.error("IO Error", e);
return null;
} catch (Exception e) {
log.error("Unknown Error", e);
return null;
}
}
}
}

View File

@ -12,8 +12,7 @@ class CvrApiSpec extends Specification {
MockWebServer mockServer = new MockWebServer();
def setup() {
api = new CvrApi("Test User Agent", "testAuthToken")
mockServer.start();
mockServer.start()
}
def cleanup() {
@ -22,6 +21,7 @@ class CvrApiSpec extends Specification {
void "test unsuccessful parsing of JSON"() {
setup:
api = new CvrApi("Test User Agent", "testAuthToken")
def testJson = "{'foo':'bar'}"
when:
@ -33,6 +33,7 @@ class CvrApiSpec extends Specification {
void "test unsuccessful parsing of JSON w. VAT as text"() {
setup:
api = new CvrApi("Test User Agent", "testAuthToken")
def testJson = "{'vat':'abcd1234'}"
when:
@ -45,6 +46,7 @@ class CvrApiSpec extends Specification {
void "test successful parsing company with CVR 25063864"() {
setup:
api = new CvrApi("Test User Agent", "testAuthToken")
def testFile = new File(getClass().getResource('/25063864.json').toURI())
def testJson = testFile.getText('UTF-8')
@ -63,6 +65,7 @@ class CvrApiSpec extends Specification {
void "test successful parsing of company with CVR 15027800"() {
setup:
api = new CvrApi("Test User Agent", "testAuthToken")
def testFile = new File(getClass().getResource('/15027800.json').toURI())
def testJson = testFile.getText('UTF-8')
@ -83,7 +86,7 @@ class CvrApiSpec extends Specification {
setup:
mockServer.enqueue(new MockResponse().setBody("{}"));
HttpUrl baseUrl = mockServer.url("/v1/dk/");
api.baseUrl = baseUrl.toString()
api = new CvrApi("Test User Agent", "testAuthToken", baseUrl.toString())
when:
def jsonString = api.getCompanyJson("15027800")
@ -100,7 +103,7 @@ class CvrApiSpec extends Specification {
def testJson = testFile.getText('UTF-8')
mockServer.enqueue(new MockResponse().setBody(testJson));
HttpUrl baseUrl = mockServer.url("/v1/dk/");
api.baseUrl = baseUrl.toString()
api = new CvrApi("Test User Agent", "testAuthToken", baseUrl.toString())
when:
def company = api.getCompanyByVatNumber("25063864")
@ -114,7 +117,7 @@ class CvrApiSpec extends Specification {
setup:
mockServer.enqueue(new MockResponse().setBody("{'foo':'bar'}"));
HttpUrl baseUrl = mockServer.url("/v1/dk/");
api.baseUrl = baseUrl.toString()
api = new CvrApi("Test User Agent", "testAuthToken", baseUrl.toString())
when:
def company = api.getCompanyByVatNumber("15027800")
@ -127,7 +130,7 @@ class CvrApiSpec extends Specification {
setup:
mockServer.enqueue(new MockResponse().setBody(''));
HttpUrl baseUrl = mockServer.url("/v1/dk/");
api.baseUrl = baseUrl.toString()
api = new CvrApi("Test User Agent", "testAuthToken", baseUrl.toString())
when:
def company = api.getCompanyByVatNumber("15027800")
@ -140,6 +143,7 @@ class CvrApiSpec extends Specification {
setup:
mockServer.enqueue(new MockResponse().setResponseCode(404));
HttpUrl baseUrl = mockServer.url("/v1/dk/");
api = new CvrApi("Test User Agent", "testAuthToken", baseUrl.toString())
when:
def company = api.get(baseUrl.toString())
@ -153,7 +157,7 @@ class CvrApiSpec extends Specification {
setup:
mockServer.enqueue(new MockResponse().setResponseCode(401));
HttpUrl baseUrl = mockServer.url("/v1/dk/");
api.baseUrl = baseUrl.toString()
api = new CvrApi("Test User Agent", "testAuthToken", baseUrl.toString())
when:
def company = api.get(baseUrl.toString())
@ -167,7 +171,7 @@ class CvrApiSpec extends Specification {
setup:
mockServer.enqueue(new MockResponse().setResponseCode(405));
HttpUrl baseUrl = mockServer.url("/v1/dk/");
api.baseUrl = baseUrl.toString()
api = new CvrApi("Test User Agent", "testAuthToken", baseUrl.toString())
when:
def company = api.get(baseUrl.toString())