如果要传递空值,或者是否与正则表达式匹配,我们想使用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")
对于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。
答案 0 :(得分:0)
XSD验证的工作方式与json-validator
相似,您必须在XSD内定义一个XSD架构和一组规则,这样才能针对该文件验证XML文件。您不需要自己进行任何XML数据转换