use of com.helger.peppol.wsclient2.ResponseType in project peppol-practical by phax.
the class WSDVS method validate.
@Nonnull
public ResponseType validate(@Nonnull final RequestType aValidationRequest) throws ValidateFaultError {
final HttpServletRequest aHttpRequest = (HttpServletRequest) m_aWSContext.getMessageContext().get(MessageContext.SERVLET_REQUEST);
final HttpServletResponse aHttpResponse = (HttpServletResponse) m_aWSContext.getMessageContext().get(MessageContext.SERVLET_RESPONSE);
final String sRateLimitKey = "ip:" + aHttpRequest.getRemoteAddr();
final boolean bOverRateLimit = m_aRequestRateLimiter != null ? m_aRequestRateLimiter.overLimitWhenIncremented(sRateLimitKey) : false;
final String sInvocationUniqueID = Integer.toString(INVOCATION_COUNTER.incrementAndGet());
RW_LOCK.writeLocked(() -> {
// Just append to file
try (final CSVWriter w = new CSVWriter(FileHelper.getPrintWriter(WebFileIO.getDataIO().getFile("wsdvs-logs.csv"), EAppend.APPEND, StandardCharsets.ISO_8859_1))) {
w.setSeparatorChar(';');
w.writeNext(SESSION_ID, sInvocationUniqueID, PDTFactory.getCurrentLocalDateTime().toString(), aHttpRequest.getRemoteAddr(), Boolean.toString(bOverRateLimit), aValidationRequest.getVESID(), Integer.toString(StringHelper.getLength(aValidationRequest.getXML())), RequestHelper.getHttpUserAgentStringFromRequest(aHttpRequest));
} catch (final IOException ex) {
LOGGER.error("Error writing CSV: " + ex.getMessage());
}
});
if (LOGGER.isInfoEnabled())
LOGGER.info("Start validating business document with SOAP WS; source [" + aHttpRequest.getRemoteAddr() + ":" + aHttpRequest.getRemotePort() + "]; VESID '" + aValidationRequest.getVESID() + "'; Payload: " + StringHelper.getLength(aValidationRequest.getXML()) + " bytes;" + (bOverRateLimit ? " RATE LIMIT EXCEEDED" : ""));
// Start request scope
try (final WebScoped aWebScoped = new WebScoped(aHttpRequest, aHttpResponse)) {
// Track total invocation
STATS_COUNTER_TOTOAL.increment();
if (bOverRateLimit) {
// Too Many Requests
if (LOGGER.isDebugEnabled())
LOGGER.debug("REST search rate limit exceeded for " + sRateLimitKey);
final HttpServletResponse aResponse = (HttpServletResponse) m_aWSContext.getMessageContext().get(MessageContext.SERVLET_RESPONSE);
try {
aResponse.sendError(CHttp.HTTP_TOO_MANY_REQUESTS);
} catch (final IOException ex) {
throw new UncheckedIOException(ex);
}
return null;
}
// Interpret parameters
final String sVESID = aValidationRequest.getVESID();
final VESID aVESID = VESID.parseIDOrNull(sVESID);
if (aVESID == null)
_throw("Syntactically invalid VESID '" + sVESID + "' provided!");
final IValidationExecutorSet<IValidationSourceXML> aVES = ExtValidationKeyRegistry.getFromIDOrNull(aVESID);
if (aVES == null)
_throw("Unsupported VESID " + aVESID.getAsSingleID() + " provided!");
if (aVES.isDeprecated())
LOGGER.warn(" VESID '" + aVESID.getAsSingleID() + "' is deprecated");
Document aXMLDoc = null;
try {
aXMLDoc = DOMReader.readXMLDOM(aValidationRequest.getXML());
} catch (final Exception ex) {
// fall-through
}
if (aXMLDoc == null)
_throw("Invalid XML provided!");
final String sDisplayLocale = aValidationRequest.getDisplayLocale();
final Locale aDisplayLocale = StringHelper.hasText(sDisplayLocale) ? LocaleCache.getInstance().getLocale(sDisplayLocale) : CPPApp.DEFAULT_LOCALE;
if (aDisplayLocale == null)
_throw("Invalid display locale '" + sDisplayLocale + "' provided!");
// All input parameters are valid!
if (LOGGER.isInfoEnabled())
LOGGER.info("Validating by SOAP WS using " + aVESID.getAsSingleID());
final StopWatch aSW = StopWatch.createdStarted();
// Start validating
final ValidationResultList aVRL = ValidationExecutionManager.executeValidation(aVES, ValidationSourceXML.create("uploaded-file", aXMLDoc), aDisplayLocale);
// Result object
final ResponseType ret = new ResponseType();
int nWarnings = 0;
int nErrors = 0;
boolean bValidationInterrupted = false;
IErrorLevel aMostSevere = EErrorLevel.LOWEST;
for (final ValidationResult aVR : aVRL) {
final ValidationResultType aVRT = new ValidationResultType();
if (aVR.isIgnored()) {
bValidationInterrupted = true;
aVRT.setSuccess(TriStateType.UNDEFINED);
} else {
aVRT.setSuccess(aVR.isSuccess() ? TriStateType.TRUE : TriStateType.FALSE);
}
aVRT.setArtifactType(aVR.getValidationArtefact().getValidationArtefactType().getID());
aVRT.setArtifactPath(aVR.getValidationArtefact().getRuleResource().getPath());
for (final IError aError : aVR.getErrorList()) {
if (aError.getErrorLevel().isGT(aMostSevere))
aMostSevere = aError.getErrorLevel();
if (aError.getErrorLevel().isGE(EErrorLevel.ERROR))
nErrors++;
else if (aError.getErrorLevel().isGE(EErrorLevel.WARN))
nWarnings++;
final ItemType aItem = new ItemType();
aItem.setErrorLevel(_convert(aError.getErrorLevel()));
if (aError.hasErrorID())
aItem.setErrorID(aError.getErrorID());
if (aError.hasErrorFieldName())
aItem.setErrorFieldName(aError.getErrorFieldName());
if (aError.hasErrorLocation())
aItem.setErrorLocation(aError.getErrorLocation().getAsString());
aItem.setErrorText(aError.getErrorText(aDisplayLocale));
if (aError.hasLinkedException())
aItem.setException(StackTraceHelper.getStackAsString(aError.getLinkedException()));
if (aError instanceof SVRLResourceError) {
final String sTest = ((SVRLResourceError) aError).getTest();
aItem.setTest(sTest);
}
aVRT.addItem(aItem);
}
ret.addResult(aVRT);
}
// Success if the worst that happened is a warning
ret.setSuccess(aMostSevere.isLE(EErrorLevel.WARN));
ret.setInterrupted(bValidationInterrupted);
ret.setMostSevereErrorLevel(_convert(aMostSevere));
aSW.stop();
if (LOGGER.isInfoEnabled())
LOGGER.info("Finished validation after " + aSW.getMillis() + "ms; " + nWarnings + " warns; " + nErrors + " errors");
STATS_TIMER.addTime(aSW.getMillis());
// Track validation result
if (ret.getMostSevereErrorLevel().equals(ErrorLevelType.ERROR))
STATS_COUNTER_VALIDATION_ERROR.increment();
else
STATS_COUNTER_VALIDATION_SUCCESS.increment();
// Track API result
if (ret.isSuccess())
STATS_COUNTER_API_SUCCESS.increment();
else
STATS_COUNTER_API_ERROR.increment();
final int nFinalWarnings = nWarnings;
final int nFinalErrors = nErrors;
RW_LOCK.writeLocked(() -> {
// Just append to file
try (final CSVWriter w = new CSVWriter(FileHelper.getPrintWriter(WebFileIO.getDataIO().getFile("wsdvs-results.csv"), EAppend.APPEND, StandardCharsets.ISO_8859_1))) {
w.setSeparatorChar(';');
w.writeNext(SESSION_ID, sInvocationUniqueID, PDTFactory.getCurrentLocalDateTime().toString(), Long.toString(aSW.getMillis()), Integer.toString(nFinalWarnings), Integer.toString(nFinalErrors));
} catch (final IOException ex) {
LOGGER.error("Error writing CSV2: " + ex.getMessage());
}
});
return ret;
} finally {
if (LOGGER.isInfoEnabled())
LOGGER.info("Finished validating business document with SOAP WS");
}
}
use of com.helger.peppol.wsclient2.ResponseType in project peppol-practical by phax.
the class MainWSDVSClient method main.
public static void main(final String[] args) throws ValidateFaultError {
WSHelper.enableSoapLogging(true);
LOGGER.info("Starting the engines");
final String sXML = StreamHelper.getAllBytesAsString(new ClassPathResource("ws/invoice1.xml"), StandardCharsets.UTF_8);
final WSDVSService aService = new WSDVSService(new FileSystemResource("src/main/webapp/WEB-INF/wsdl/pp-dvs.wsdl").getAsURL());
final WSDVSPort aPort = aService.getWSDVSPort();
final WSClientConfig aWsClientConfig = new WSClientConfig(URLHelper.getAsURL(true ? "https://peppol.helger.com/wsdvs" : "http://localhost:8080/wsdvs"));
aWsClientConfig.applyWSSettingsToBindingProvider((BindingProvider) aPort);
LOGGER.info("Starting validation process");
final RequestType aRequest = new RequestType();
aRequest.setVESID(PeppolValidation3_13_0.VID_OPENPEPPOL_INVOICE_V3.getAsSingleID());
aRequest.setXML(sXML);
aRequest.setDisplayLocale("en");
final ResponseType aResponse = aPort.validate(aRequest);
if (false)
LOGGER.info("Result:\n" + new GenericJAXBMarshaller<>(ResponseType.class, com.helger.peppol.wsclient2.ObjectFactory._ValidateResponseOutput_QNAME).getAsString(aResponse));
LOGGER.info("Success: " + aResponse.isSuccess());
LOGGER.info("Interrupted: " + aResponse.isInterrupted());
LOGGER.info("Most severe error level: " + aResponse.getMostSevereErrorLevel());
int nPos = 1;
final int nMaxPos = aResponse.getResultCount();
for (final ValidationResultType aResult : aResponse.getResult()) {
LOGGER.info(" [" + nPos + "/" + nMaxPos + "] " + aResult.getArtifactType() + " - " + aResult.getArtifactPath());
++nPos;
LOGGER.info(" Success: " + aResult.getSuccess());
for (final ItemType aItem : aResult.getItem()) {
LOGGER.info(" Error Level: " + aItem.getErrorLevel());
if (aItem.getErrorID() != null)
LOGGER.info(" Error ID: " + aItem.getErrorID());
if (aItem.getErrorFieldName() != null)
LOGGER.info(" Error Field: " + aItem.getErrorFieldName());
LOGGER.info(" Error Text: " + aItem.getErrorText());
if (aItem.getErrorLocation() != null)
LOGGER.info(" Location: " + aItem.getErrorLocation());
if (aItem.getTest() != null)
LOGGER.info(" Test: " + aItem.getTest());
LOGGER.info("--");
}
}
LOGGER.info("Done");
}
use of com.helger.peppol.wsclient2.ResponseType in project UVMS-Docker by UnionVMS.
the class FluxMessageReceiverBeanIT method postRequestTypeRequestSuccessTest.
/**
* Post request type request success test.
*
* @throws Exception the exception
*/
@Test
@Ignore
public void postRequestTypeRequestSuccessTest() throws Exception {
Asset testAsset = AssetTestHelper.createTestAsset();
MobileTerminalType mobileTerminalType = MobileTerminalTestHelper.createMobileTerminalType();
MobileTerminalTestHelper.assignMobileTerminal(testAsset, mobileTerminalType);
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(new Date());
BridgeConnectorPortType bridgeConnectorPortType = createBridgeConnector();
RequestType requestType = new RequestType();
FLUXVesselPositionMessage fLUXVesselPositionMessage = new FLUXVesselPositionMessage();
VesselTransportMeansType vesselTransportMeansType = new VesselTransportMeansType();
IDType cfrId = new IDType();
cfrId.setSchemeID("CFR");
cfrId.setValue(testAsset.getCfr());
vesselTransportMeansType.getIDS().add(cfrId);
IDType ircsId = new IDType();
ircsId.setSchemeID("IRCS");
ircsId.setValue(testAsset.getIrcs());
vesselTransportMeansType.getIDS().add(ircsId);
// IDType extMarkingId = new IDType();
// extMarkingId.setSchemeID("EXT_MARKING");
// extMarkingId.setValue(testAsset.getExternalMarking());
// vesselTransportMeansType.getIDS().add(extMarkingId);
VesselCountryType vesselCountry = new VesselCountryType();
IDType countryId = new IDType();
countryId.setValue("SWE");
vesselCountry.setID(countryId);
vesselTransportMeansType.setRegistrationVesselCountry(vesselCountry);
VesselPositionEventType vesselPositionEventType = new VesselPositionEventType();
MeasureType measureType = new MeasureType();
measureType.setValue(new BigDecimal(282));
vesselPositionEventType.setCourseValueMeasure(measureType);
DateTimeType posDateTime = new DateTimeType();
posDateTime.setDateTime(DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar));
vesselPositionEventType.setObtainedOccurrenceDateTime(posDateTime);
VesselGeographicalCoordinateType cordinates = new VesselGeographicalCoordinateType();
MeasureType longitude = new MeasureType();
longitude.setValue(new BigDecimal(21.5740000000));
cordinates.setLongitudeMeasure(longitude);
MeasureType latitude = new MeasureType();
latitude.setValue(new BigDecimal(59.6480000000));
cordinates.setLatitudeMeasure(latitude);
vesselPositionEventType.setSpecifiedVesselGeographicalCoordinate(cordinates);
MeasureType speedValue = new MeasureType();
speedValue.setValue(new BigDecimal(7.5));
vesselPositionEventType.setSpeedValueMeasure(speedValue);
CodeType typeCodeValue = new CodeType();
typeCodeValue.setValue("POS");
vesselPositionEventType.setTypeCode(typeCodeValue);
vesselTransportMeansType.getSpecifiedVesselPositionEvents().add(vesselPositionEventType);
fLUXVesselPositionMessage.setVesselTransportMeans(vesselTransportMeansType);
FLUXReportDocumentType fluxReportDocumentType = new FLUXReportDocumentType();
DateTimeType dateTimeType = new DateTimeType();
dateTimeType.setDateTime(DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar));
fluxReportDocumentType.setCreationDateTime(dateTimeType);
FLUXPartyType fLUXPartyType = new FLUXPartyType();
fLUXPartyType.getIDS().add(countryId);
fluxReportDocumentType.setOwnerFLUXParty(fLUXPartyType);
TextType textType = new TextType();
fluxReportDocumentType.setPurpose(textType);
CodeType purposeCode = new CodeType();
purposeCode.setValue("9");
fluxReportDocumentType.setPurposeCode(purposeCode);
IDType idType = new IDType();
fluxReportDocumentType.setReferencedID(idType);
CodeType typeCode = new CodeType();
fluxReportDocumentType.setTypeCode(typeCode);
fLUXVesselPositionMessage.setFLUXReportDocument(fluxReportDocumentType);
requestType.setAny(createAnyElement(fLUXVesselPositionMessage));
requestType.setAD("SWE");
requestType.setAR(true);
requestType.setDF("df");
requestType.setON("on");
requestType.setTO(1234);
requestType.setTODT(DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar));
ResponseType responseType = bridgeConnectorPortType.post(requestType);
assertNotNull(responseType);
assertEquals("OK", responseType.getStatus());
Thread.sleep(7500);
List<String> connectIds = new ArrayList<>();
connectIds.add(testAsset.getEventHistory().getEventId());
final HttpResponse response = Request.Post(getBaseUrl() + "movement/rest/movement/latest").setHeader("Content-Type", "application/json").setHeader("Authorization", getValidJwtToken()).bodyByteArray(writeValueAsString(connectIds).getBytes()).execute().returnResponse();
List dataList = checkSuccessResponseReturnType(response, List.class);
assertEquals("Expect one position in movement db", 1, dataList.size());
}
use of com.helger.peppol.wsclient2.ResponseType in project ddf by codice.
the class XacmlClient method unmarshal.
/**
* Unmarshalls the XACML response.
*
* @param xacmlResponse The XACML response with all namespaces and namespace prefixes added.
* @return The XACML response.
* @throws PdpException
*/
@SuppressWarnings("unchecked")
private ResponseType unmarshal(DOMResult xacmlResponse) throws PdpException {
List<String> ctxPath = ImmutableList.of(ResponseType.class.getPackage().getName());
if (null == parser) {
throw new IllegalStateException("XMLParser must be configured.");
}
ParserConfigurator configurator = parser.configureParser(ctxPath, XacmlClient.class.getClassLoader());
try {
JAXBElement<ResponseType> xacmlResponseTypeElement = parser.unmarshal(configurator, JAXBElement.class, xacmlResponse.getNode());
return xacmlResponseTypeElement.getValue();
} catch (ParserException e) {
String message = "Unable to unmarshal XACML response.";
LOGGER.info(message);
throw new PdpException(message, e);
}
}
use of com.helger.peppol.wsclient2.ResponseType in project ddf by codice.
the class XacmlClientTest method testWrapperpoliciesdirectorypolicyadded.
@Test
public void testWrapperpoliciesdirectorypolicyadded() throws Exception {
LOGGER.debug("\n\n\n##### testXACMLWrapper_policies_directory_policy_added");
File policyDir = folder.newFolder("tempDir");
XacmlClient.defaultPollingIntervalInSeconds = 1;
// Perform Test
XacmlClient pdp = new XacmlClient(policyDir.getCanonicalPath(), new XmlParser(), mock(SecurityLogger.class));
File srcFile = new File(projectHome + File.separator + RELATIVE_POLICIES_DIR + File.separator + POLICY_FILE);
FileUtils.copyFileToDirectory(srcFile, policyDir);
Thread.sleep(2000);
RequestType xacmlRequestType = new RequestType();
xacmlRequestType.setCombinedDecision(false);
xacmlRequestType.setReturnPolicyIdList(false);
AttributesType actionAttributes = new AttributesType();
actionAttributes.setCategory(ACTION_CATEGORY);
AttributeType actionAttribute = new AttributeType();
actionAttribute.setAttributeId(ACTION_ID);
actionAttribute.setIncludeInResult(false);
AttributeValueType actionValue = new AttributeValueType();
actionValue.setDataType(STRING_DATA_TYPE);
actionValue.getContent().add(QUERY_ACTION);
actionAttribute.getAttributeValue().add(actionValue);
actionAttributes.getAttribute().add(actionAttribute);
AttributesType subjectAttributes = new AttributesType();
subjectAttributes.setCategory(SUBJECT_CATEGORY);
AttributeType subjectAttribute = new AttributeType();
subjectAttribute.setAttributeId(SUBJECT_ID);
subjectAttribute.setIncludeInResult(false);
AttributeValueType subjectValue = new AttributeValueType();
subjectValue.setDataType(STRING_DATA_TYPE);
subjectValue.getContent().add(TEST_USER_1);
subjectAttribute.getAttributeValue().add(subjectValue);
subjectAttributes.getAttribute().add(subjectAttribute);
AttributeType roleAttribute = new AttributeType();
roleAttribute.setAttributeId(ROLE_CLAIM);
roleAttribute.setIncludeInResult(false);
AttributeValueType roleValue = new AttributeValueType();
roleValue.setDataType(STRING_DATA_TYPE);
roleValue.getContent().add(ROLE);
roleAttribute.getAttributeValue().add(roleValue);
subjectAttributes.getAttribute().add(roleAttribute);
AttributesType categoryAttributes = new AttributesType();
categoryAttributes.setCategory(PERMISSIONS_CATEGORY);
AttributeType citizenshipAttribute = new AttributeType();
citizenshipAttribute.setAttributeId(CITIZENSHIP_ATTRIBUTE);
citizenshipAttribute.setIncludeInResult(false);
AttributeValueType citizenshipValue = new AttributeValueType();
citizenshipValue.setDataType(STRING_DATA_TYPE);
citizenshipValue.getContent().add(US_COUNTRY);
citizenshipAttribute.getAttributeValue().add(citizenshipValue);
categoryAttributes.getAttribute().add(citizenshipAttribute);
xacmlRequestType.getAttributes().add(actionAttributes);
xacmlRequestType.getAttributes().add(subjectAttributes);
xacmlRequestType.getAttributes().add(categoryAttributes);
// Perform Test
ResponseType xacmlResponse = pdp.evaluate(xacmlRequestType);
// Verify - The policy was loaded to allow a permit decision
JAXBContext jaxbContext = JAXBContext.newInstance(ResponseType.class);
Marshaller marshaller = jaxbContext.createMarshaller();
ObjectFactory objectFactory = new ObjectFactory();
Writer writer = new StringWriter();
marshaller.marshal(objectFactory.createResponse(xacmlResponse), writer);
LOGGER.debug("\nXACML 3.0 Response:\n{}", writer.toString());
assertEquals(xacmlResponse.getResult().get(0).getDecision(), DecisionType.PERMIT);
FileUtils.deleteDirectory(policyDir);
}
Aggregations