使用骆驼验证XML请求正文

时间:2019-08-02 11:16:27

标签: java xml apache-camel swagger

如果要传递空值,或者是否与正则表达式匹配,我们想使用apache camel验证传入的XML请求。方案如下:

我们有一个像这样的路由器:

    rest().description("SAMPLE REST API")
    .consumes("application/xml").produces("application/xml")
    .post("/myendpoint")
    .type(MyEndpointRequest.class)
    .description("Get My Endpoint Info")
    .param().name("header1").type(RestParamType.header).endParam()
    .param().name("header2").type(RestParamType.header).endParam()
    .outType(MyEndpointResponse.class)
    .responseMessage().code(200).endResponseMessage()
    .to("direct:myendpointImpl");


    from("direct:myendpointImpl")
    .bean(transactionIdGenerator)
    .setHeader("header3", constant("myendpointImpl"))
    .process(new HeaderValidationProcessor())
    .to("validator:customerinfo.xsd")
    .validate(header("validation").isEqualTo("success"))
    .setProperty("RequestData", simple("${body}"))
    .process(new MyEndpointTokenProcessor())
    .setHeader(Exchange.HTTP_METHOD, constant("POST"))
    .setHeader(Exchange.CONTENT_TYPE, constant("application/x-www-form-urlencoded"))

    .to("{{MyEndpoint_token_url}}?proxyHost={{proxyHost}}&proxyPort={{proxyPort}}&bridgeEndpoint=true")
    .unmarshal().json(JsonLibrary.Jackson)

    .process(new AuthenticationProcessor())
    .setHeader(Exchange.HTTP_METHOD, constant("POST"))
    .setHeader(Exchange.CONTENT_TYPE, constant("application/xml"))
    .recipientList(simple("${in.header.instance_url}/services/apexrest/ABCCompanyInformation/?proxyHost={{proxyHost}}&proxyPort={{proxyPort}}&bridgeEndpoint=true&httpClient.cookiePolicy=ignoreCookies"))
    .process(new CustInfoRespProcessor())
    .unmarshal().json(JsonLibrary.Jackson)
    .marshal().jacksonxml(true)
    .to("xslt:RemoveNode.xsl")

.end();

对于swagger主体,在swagger UI中,我们根据请求XML创建了bean,并将其传递给“ .type(MyEndpointRequest.class)”。 一切正常。

现在,我们要验证输入的XML。为此,我搜索并找到了一些解决方案,其中提到了.to(“ validator:customerinfo.xsd”),在这里我必须将请求XML转换为XSD文件,然后它才能开始工作。

我已经使用:.to(“ json-validator:XYZ.json”)完成了JSON请求的类似操作,在这里我们将请求JSON转换为JSON模式,并在POM中导入了“ camel-json-validator”。

有没有类似JSON-validator的方法。 如果我们可以重新使用XML进行验证,那么我们也有用于请求XML的Bean。

1 个答案:

答案 0 :(得分:0)

XSD验证的工作方式与json-validator相似,您必须在XSD内定义一个XSD架构和一组规则,这样才能针对该文件验证XML文件。您不需要自己进行任何XML数据转换