目前我正在使用Spring-ws实现Web服务。在这里,我对xsd验证感到震惊。对于xsd验证,我使用以下配置
<bean id="validatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
<property name="xsdSchema" ref="schema" />
<property name="validateRequest" value="true" />
<property name="validateResponse" value="true" />
</bean>
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="/WEB-INF/ProductSchema.xsd" />
</bean>
这里我在bean初始化期间传递了xsd文件。有没有办法让我动态发送这个(ProductSchema.xsd)xsd文件。因为我将根据输入的有效负载知道哪个xsd文件需要发送。
请帮帮我。提前致谢
答案 0 :(得分:0)
我不知道你有多少XSD,但也许你可以在ProductSchema.xsd中定义导入以包含其他的。这至少是我如何设置的。
例如:
<import namespace="http://namespace" schemaLocation="data.xsd" />
答案 1 :(得分:0)
我不太确定你要做什么。
但您可以通过使用与有效负载中元素名称匹配的localPart注释处理程序方法来制作匹配不同有效负载的不同端点/方法:
@Endpoint
public class MyEndpoint {
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "NameOfMyXmlRequestElement")
@ResponsePayload
public MyResponse handleMyRequest(@RequestPayload MyRequest MyRequest) throws Exception {
...
然后可以使用特定架构解组/验证已接收的请求:
<bean id="myJaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>mydomain.model.oxm.MyRequest</value>
<value>mydomain.model.oxm.MyResponse</value>
</list>
</property>
<property name="schema" ref="MyServiceSchema" />
</bean>
<bean id="MyServiceSchema" class="org.springframework.core.io.ClassPathResource">
<constructor-arg value="WEB-INF/schemas/MyService.xsd" />
</bean>
MyRequest类必须注释才能使用Jaxb2marshaller,@ XmlRootElement(name =“MyRequest”)等...