我试图通过客户端访问SOAP请求和响应,以便计算每个调用的执行时间。我实现了一个SOAPHandler
来实现这一点,但是没有调用handleMessage
方法(断点没有命中或者没有记录日志)。我正在使用wsimport创建客户端类/存根,并将一个绑定文件作为参数传递给wsimport命令。
这就是我到目前为止所做的工作:
<jaxws:bindings
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<handler-name>LoggingSOAPHandler</handler-name>
<handler-class>com.handler.LoggingSOAPHandler</handler-class>
</handler>
</handler-chain>
</handler-chains>
</jaxws:bindings>
<property name="package" value="com.ws"/>
<property name="src" value="docroot/WEB-INF/src"/>
<property name="classes" value="docroot/WEB-INF/classes"/>
<property name="bindingfile" value="docroot/WEB-INF/src/com/handler/handler-chain.xml"/>
<target name="wsimport">
<exec executable="${jdk.home}/bin/wsimport">
<arg line="-keep -s ${src} -p ${package} -d ${classes} -b ${bindingfile} ${wsdl}"/>
</exec>
</target>
@WebServiceClient(name = "TestService", targetNamespace = "http://webservice.com/", wsdlLocation = "http://test:8290/TEST/services/test?wsdl")
@HandlerChain(file = "TestService_Service_handler.xml")
public class TestService_Service
extends Service
{
...
}
<?xml version="1.0" encoding="UTF-8"?><handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<handler-name>LoggingSOAPHandler</handler-name>
<handler-class>com.handler.LoggingSOAPHandler</handler-class>
</handler>
</handler-chain>
</handler-chains>
下面是我的SOAPHandler
:
public class LoggingSOAPHandler implements SOAPHandler<SOAPMessageContext> {
private static Logger _logger = LoggerFactory.getLogger(LoggingSOAPHandler.class);
@Override
public boolean handleMessage(SOAPMessageContext messageContext) {
Boolean outboundProperty = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
_logger.info("\nOutbound message:");
} else {
_logger.info("\nInbound message:");
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
_logger.info("Client : handleFault()......");
return false;
}
@Override
public void close(MessageContext context) {
_logger.info("Client : close()......");
}
@Override
public Set<QName> getHeaders() {
_logger.info("Client : getHeaders()......");
return null;
}
}
调用webservice时,根本不会调用handleMessage方法。有什么想法吗?
我正在使用JAX-WS RI 2.2.4-B01生成存根。
为这个问题找到了一个解决方案,但是为了回答这个问题,我必须提供关于这个项目的更多上下文。
这个项目使用Spring MVC和JaxWsPortProxyFactoryBean来实现JAX WS服务接口。
由于目标是让所有SOAP调用都使用'LoggingSoapHandler',因此必须通过HandlerResolver将'LoggingSoapHandler'注入到JaxWsPortProxyFactoryBean中。我创建了一个HandlerResolver实现....
public class CustomHandlerResolver implements HandlerResolver {
/**
* Overrode in order to load custom handlers.
* @see javax.xml.ws.handler.HandlerResolver#getHandlerChain(javax.xml.ws.handler.PortInfo)
*/
public List<Handler> getHandlerChain(PortInfo portInfo) {
List<Handler> handlerChain = new ArrayList<Handler>();
LoggingSOAPHandler hh = new LoggingSOAPHandler();
handlerChain.add(hh);
return handlerChain;
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!-- Use custom HandlerResolver that loads a list of custom SOAP handlers -->
<bean id="CustomHandlerResolver" class="com.ws.handler.CustomHandlerResolver"/>
<bean id="registrationService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
<property name="lookupServiceOnStartup" value="false" />
<property name="serviceName" value="TestService" />
<property name="serviceInterface" value="com.ws.registration.TestService" />
<property name="wsdlDocumentUrl" value="${registration.service}?wsdl" />
<property name="namespaceUri" value="${registration.namespace}" />
<property name="endpointAddress" value="${registration.service}" />
<property name="username" value="${registration.username}"/>
<property name="password" value="${registration.password}"/>
<property name="customProperties" ref="jaxwsCustomProperties" />
<property name="handlerResolver" ref="CustomHandlerResolver"/>
</bean>
.......
</beans>
因此,因为处理程序解析器被注入到JaxWsPortProxyFactoryBean,所以在CustomHandlerResolver类中指定的处理程序是在运行时注入的。
我正在尝试实现一个CORS响应过滤器,以允许来自我的JavaScript前端的跨域引用。我使用的是Resteasy附带的< code > wildly 10.0 . final ,如果我理解正确的话,它是< code>JAX-RS 2.0的补充。 EDIT:将@Provider添加到CorsResponseFilter中,并作为一个单独的元素添加到RestServiceConfig中。 我需要做什
为了实现上面的逻辑,我需要客户机发送他的监听器信息和请求(基本上是URI)。这是在处理完请求后,将请求状态更新到客户端。 使用JAX-RS处理长时间运行的操作
问题内容: 实例化ArrayAdapter时,我收到以下警告(编译正常): 这是问题所在: 有人对它为什么给我这个警告有任何想法吗? 问题答案: 这是因为希望您指定它将处理的对象类型。因此,为了避免这些警告,请执行以下操作:
问题内容: 我正在尝试通过将它们添加到和中,并在中找到单独的重复项和非重复项 在本月底,我希望是和是,因为有2个额外的实例和1 。但是,运行此命令后,它们都为空。 永远不会调用提供给该流的lambda,我通过尝试在内部打印进行验证: 当我尝试与任何一个一起使用时,这将不起作用。我究竟做错了什么? 注意:可能还有其他与此类似的问题,但是我正在寻找一种规范的答案,以说明这种问题为什么不适用于Java
问题内容: 我试图绘制一个简单的矩形,但我认为paintComponent方法没有被调用。这是带有main方法的类的代码: 和带有paintComponent()的类 这是什么问题,我不知道… 问题答案: 虽然已经提供的答案可能会导致出现矩形,但这种方法并非最佳。此示例旨在显示一种更好的方法。阅读代码中的注释以获取详细信息。 请注意,应该在EDT上启动Swing / AWT GUI。这留给读者练习
我的怀疑是 > 为什么要调用webservice,而不是使用? 可以用来调用此webservice吗