2017-11-16 11 views
0

SOAPサービスと対話するために、Dropwizard-JAXWSでApache CXFを使用しています。我々は、クライアントレベルで応答を検証したいと考えています。クライアントレスポンスの検証CXF

我々はこれを試してみた:http://cxf.apache.org/faq.htmlから

((BindingProvider)port).getRequestContext().put("schema-validation-enabled", "true"); 

は運で、クライアントを構築するとき。

我々は必須属性は内容が存在するかどうかではなく、検証するようだメッセージ

public class ClientResponseSchemaValidatingInterceptor extends AbstractSoapInterceptor { 

public ClientResponseSchemaValidatingInterceptor() { 
    super(Phase.RECEIVE); 
} 

@Override 
public void handleMessage(SoapMessage message) { 
    message.put(Message.SCHEMA_VALIDATION_ENABLED, validationEnabled); 
    message.getExchange().getInMessage().put(Message.SCHEMA_VALIDATION_ENABLED, validationEnabled); 
    message.getExchange().put(Message.SCHEMA_VALIDATION_ENABLED, validationEnabled); 
} 

}

に次のクライアントのためのインターセプタを書き込み、追加され得ている最も近いです(すなわち、xsdの正規表現に一致する)

答えて

0

これを達成するための文書化された方法に失敗した後、私はメッセージを検証するカスタムインターセプタを作成します。

public class ClientResponseSchemaValidatingInterceptor extends AbstractSoapInterceptor { 

private Marshaller marshaller= null; 

public ClientResponseSchemaValidatingInterceptor() { 
    super(Phase.PRE_INVOKE); 

    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    try { 
     Schema schema = 
      schemaFactory.newSchema(this.getClass().getClassLoader().getResource("schema/your-xsd.xsd")); 

     marshaller = JAXBContext.newInstance(YourModelClass.class).createMarshaller(); 
     marshaller.setSchema(schema); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
    } catch (SAXException | JAXBException ex) { 
     log.error("Error creating marshaller",ex); 
    } 

} 

@Override 
public void handleMessage(SoapMessage message) { 
    List contents = message.getContent(List.class); 

    if (contents!=null){ 
     String responseType = contents.get(0).getClass().getSimpleName(); 
     try { 
       marshaller.marshal(contents.get(0), new DefaultHandler()) 
      } 
     } catch (JAXBException ex){ 
      log.info("Failed validation",ex); 
      throw new RuntimeException("Validation Error"); 
     } 
    } 
} 

}

関連する問題