小编典典

使用@SchemaValidation的WebLogic中的JAX-WS验证架构

java

我找不到解决方案,发现更多人陷入同一问题,因此我将其发布在这里。


默认情况下,JAX-WS服务器(至少用于WebLogic)将不验证通过其关联架构接收到的消息。

由于任何无效值(错误的xsd:dateTime格式,数字字段中的字母等)都将导致Java对象(包括必填字段)中的 值,从而导致很多问题。

我需要做的是由服务器提供的简单验证。

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

我不希望实现任何自定义验证器。服务器应使用简单明了的配置来提供此类服务。


阅读 201

收藏
2020-11-23

共1个答案

小编典典

问题是:我使用了错误的软件包@SchemaValidation

适用于我的正确类是 com.sun.xml.ws.developer.SchemaValidation ,该类在文件中提供
mw_home\modules\glassfish.jaxws.rt_1.3.0.0_2-1-5.jar (使用WLS 10.3.6)。

在上一个代码段中,我引用了错误的包:com.sun.xml。 内部 …但是使用WebLogic提供的功能可以立即工作。

如果您使用Maven并将捆绑的JAR用作依赖项,则可能在类路径中没有该库,这导致了我的问题。您需要通过依赖项将其添加到类路径(provided仅适用于作用域),并在JAX-
WS WebService类中引用该类名称的正确包(抽象类不会这样做)。

“服务器”页面上的

启用架构验证”中的更多信息。

由于我不需要任何自定义行为,因此此模式验证对我而言已经足够。

2020-11-23