Java JAX-WS使用@SchemaValidation验证WebLogic中的模式
我没能找到解决方案,我发现更多的人陷入了同样的问题,所以我将在这里发布 默认情况下,至少用于WebLogic的JAX-WS服务器不会验证接收到的消息及其关联的模式 这可能会导致很多问题,因为任何无效值错误的xsd:dateTime格式、数字字段上的字母等都会导致Java对象(包括必填字段)中出现空值 我需要做的是由服务器提供一个简单的验证Java JAX-WS使用@SchemaValidation验证WebLogic中的模式,java,web-services,weblogic,jax-ws,Java,Web Services,Weblogic,Jax Ws,我没能找到解决方案,我发现更多的人陷入了同样的问题,所以我将在这里发布 默认情况下,至少用于WebLogic的JAX-WS服务器不会验证接收到的消息及其关联的模式 这可能会导致很多问题,因为任何无效值错误的xsd:dateTime格式、数字字段上的字母等都会导致Java对象(包括必填字段)中出现空值 我需要做的是由服务器提供一个简单的验证 import com.sun.xml.internal.ws.developer.SchemaValidation; @Stateless @WebServ
import com.sun.xml.internal.ws.developer.SchemaValidation;
@Stateless
@WebService(portName="ValidatedService")
@SchemaValidation
public class ValidatedService {
public void operation(@WebParam(name="request") ValidatedRequest request) {
/* do stuff */
}
}
出于某种原因,当我尝试使用提供的架构验证时,我遇到了以下异常:
Caused By: javax.xml.ws.WebServiceException: Annotation @com.sun.xml.internal.ws.developer.SchemaValidation(handler=class com.sun.xml.internal.ws.server.DraconianValidationErrorHandler) is not recognizable, atleast one constructor of class com.sun.xml.internal.ws.developer.SchemaValidationFeature should be marked with @FeatureConstructor
我不希望实现任何自定义验证器。服务器应该以简单明了的配置提供这种类型的服务。问题是:我对@SchemaValidation使用了错误的包 对我来说,正确的类是com.sun.xml.ws.developer.SchemaValidation,它使用WLS 10.3.6在文件mw_home\modules\glassfish.jaxws.rt_1.3.0.0_2-1-5.jar中提供 在前面的代码段中,我引用了错误的包:com.sun.xml.internal。。。但是,使用WebLogic提供的一个可以立即起作用 如果您使用Maven并使用绑定的JAR作为依赖项,那么类路径中可能没有这个库,这就导致了这个问题。您只需要通过依赖项提供的作用域将其添加到类路径中,并在JAX-WSWebService类中引用该类名的正确包—抽象类无法做到这一点 更多信息请参见页面
目前,这种模式验证对我来说已经足够了,因为我不需要任何自定义行为。问题是:我对@SchemaValidation使用了错误的包 对我来说,正确的类是com.sun.xml.ws.developer.SchemaValidation,它使用WLS 10.3.6在文件mw_home\modules\glassfish.jaxws.rt_1.3.0.0_2-1-5.jar中提供 在前面的代码段中,我引用了错误的包:com.sun.xml.internal。。。但是,使用WebLogic提供的一个可以立即起作用 如果您使用Maven并使用绑定的JAR作为依赖项,那么类路径中可能没有这个库,这就导致了这个问题。您只需要通过依赖项提供的作用域将其添加到类路径中,并在JAX-WSWebService类中引用该类名的正确包—抽象类无法做到这一点 更多信息请参见页面
目前,这种模式验证对我来说已经足够了,因为我不需要任何自定义行为。在我的例子中:包含许多模块的Maven项目。我在尝试将应用程序部署到tomcat时遇到了下一个错误: 无法分析运行时描述符:javax.xml.ws.webserviceeexception:Annotation@com.sun.xml.ws.developer.SchemaValidationhandler=class com.sun.xml.ws.server.DraconianValidationErrorHandler不可识别,类com.sun.xml.ws.developer.SchemaValidationFeature的至少一个构造函数应标记为@FeatureConstructor 我通过在WEB-INF/lib中不包含jaxws-rt.jar解决了这个问题。 这个库似乎已经存在于tomcat/lib文件夹中 刚刚调整了pom.xml,设置了这个依赖项的作用域。
现在一切正常。在我的例子中:包含许多模块的Maven项目。我在尝试将应用程序部署到tomcat时遇到了下一个错误: 无法分析运行时描述符:javax.xml.ws.webserviceeexception:Annotation@com.sun.xml.ws.developer.SchemaValidationhandler=class com.sun.xml.ws.server.DraconianValidationErrorHandler不可识别,类com.sun.xml.ws.developer.SchemaValidationFeature的至少一个构造函数应标记为@FeatureConstructor 我通过在WEB-INF/lib中不包含jaxws-rt.jar解决了这个问题。 这个库似乎已经存在于tomcat/lib文件夹中 刚刚调整了pom.xml,设置了这个依赖项的作用域。
现在一切正常。我也使用Maven。我们打包了JAR并发布到Nexus服务器,并将其用作提供的依赖项。我们将JAR打包并发布到Nexus服务器,并将其用作提供的依赖项。