当前位置: 首页 > 知识库问答 >
问题:

是否可以通过编程方式控制设置jaxb验证事件处理程序?

何安宜
2023-03-14

在CXF SOAP Web服务中,我使用以下注释禁用xsd验证:

@EndpointProperties({ 
    @EndpointProperty(key = "set-jaxb-validation-event-handler", value = "false") 
})

我希望在运行时控制验证(根据从数据库检索的设置值启用/禁用它)。我的问题是:是否可以在运行时禁用/启用此处理程序?可能通过编写自定义事件处理程序而根本不使用此属性?

谢谢

编辑:一个选项不是使用setjaxb验证处理程序禁用验证,而是子类ValidationEventHandler。正如这里所解释的,然后我将检查handleEvent中的数据库设置,并根据其值返回。

但是这种方法仍然有一些缺点:首先,这个网络服务是用注释配置的,我似乎找不到一种方法来应用带有注释的ValidationEventHandler(与以下问题相同:使用时如何在JAXB解组器上设置自定义ValidationEventHandler注释)。

第二,这意味着即使我不需要验证,也会执行验证;我将失去任何性能优势。

事实上,它并不完全适合我的需求,所以我仍然愿意接受任何建议。

共有3个答案

阳修永
2023-03-14

对于那些试图在总线级别上配置它的人来说,以下方法对我很有效:

<cxf:bus id="soapClientCxfBus" bus="soapClientCxfBus" >
    <cxf:properties>
        <entry key="set-jaxb-validation-event-handler" value="false" />
    </cxf:properties>
</cxf:bus>
越运锋
2023-03-14

我终于找到了一个有效的解决办法。

在JBoss EAP 6.0上运行CXF时,我在standalone中向webservices子系统添加了以下配置。xml:

<subsystem xmlns="urn:jboss:domain:webservices:1.2">
    <!-- ... -->
    <endpoint-config name="myconfig">
        <property name="set-jaxb-validation-event-handler" value="false"/>
    </endpoint-config>
    <!-- ...-->
</subsystem>

以及SEI实现的以下注释:

@org.jboss.ws.api.annotation.EndpointConfig(configName = "myconfig")

这是相关的Maven依赖项:

    <dependency>
        <groupId>org.jboss.ws</groupId>
        <artifactId>jbossws-api</artifactId>
        <version>1.0.1.Final</version>
        <scope>provided</scope>
    </dependency>

如果我们想更改属性值,我们仍然需要重新启动服务器,但这不是什么坏事。

彭华皓
2023-03-14

是的,有可能。

MyService service = new MyService();
MyServiceInterface port = service.getMyServicePort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(
    "set-jaxb-validation-event-handler", Boolean.FALSE);
 类似资料:
  • 问题内容: 说我有两个JavaBeans 和。 如果创建一个Person对象的列表,我想编组成这样的东西: 可以使用这里描述的技术: 使用JAXB解组/编组List 通过使用和注释JaxbList,可以将其编组为上述XML。 但是,能够重用相同的类来封送对象列表也很好。实际上,我将有许多其他类型的bean。我可以这样: 但是,理想情况下,最好用类名的复数形式替换“列表”,用类名替换“ item”。

  • 问题内容: 我需要以编程方式启动新的Java进程并动态设置JMX端口。所以不要这样做 我想做以下 但这不起作用。知道为什么吗? 问题答案: 在调用代码时,您已经错过了配置jmxremote连接器的机会。 您需要做的是创建您自己的rmi注册表和JMXConnectorServer来侦听rmi调用并将它们传递给MBeanServer。

  • > 步骤: request=oauthClientRequest.AuthorizationProvider(OAuthProviderType.google)//AuthorizationProvider(OAuthProviderType.google).setState(OAuth.oauth_state).setResponseType(Oauth.oauth_code).setreDir

  • 是否可以以编程方式控制以启用或禁用它?我不想只是在每个方法中编写代码来执行某种 我见过这个问题,但这只适用于启动时。我真正需要的是允许我多次启用或禁用控制器的东西。 我想过不同的方法,但不知道哪些在Spring可行。 实际上控制容器(在我的例子中是jetty),因此对该特定endpoint的请求被禁用。 以某种方式控制<code>RequestMappingHandlerMapping</code

  • 问题内容: 我正在使用javascript和htmlcanvas调整jpeg图像的大小。调整大小后,我在锚标记中用作href属性,以提供一个链接,用户可以在其中下载调整大小的图像。 在一定的图像尺寸下效果很好。 似乎不同的浏览器对数据URL的大小有不同的限制,如下所述 在chrome中,当我超出数据URL大小限制时,单击下载链接不会发生任何事情。没有错误或任何东西(据我所知)。 是否可以通过编程方

  • 我习惯于用JavaFx编写如下所示的代码,因为这就是我几年前学习的方式。 我最近安装了JetBrains IntelliJ IDEA Ultimate Edition 2018.1.6,我发现要打开primaryStage窗口,我需要一个fxml文件。 我必须这么做, 如果我运行第一个代码片段,什么都不会显示。但是如果我用FXMLLoader.load(getClass(). getResourc