小编Den*_*ian的帖子

在客户端使用JAX-WS跟踪SOAP请求/响应

我正在使用JAX-WS参考实现(2.1.7),我想在客户端跟踪SOAP请求/响应.实际上,我需要的是在收到响应时检查一些Http头.

按照以前的问题(使用JAX-WSJava JAX-WS Web服务客户端跟踪XML请求/响应:如何记录日志请求和响应xml?),我创建了自己的处理程序,以便在发送请求和接收请求时进行记录响应:

public class SHandler implements SOAPHandler<SOAPMessageContext>
{

  private static final Logger log = Logger.getLogger(SHandler.class);

  @Nullable
  @Override
  public Set<QName> getHeaders()
  {    
    log.debug(">>>>>>>>>>> GetHeaders");
    return null;    
  }

  @Override
  public boolean handleMessage(SOAPMessageContext soapMessageContext)
  {
    log.debug(">>>>>>>>>>> HandleMessage");
    return true;
  }

  @Override
  public boolean handleFault(SOAPMessageContext soapMessageContext)
  {
    log.debug(">>>>>>>>>>> HandleFault");
    return true;
  }

  @Override
  public void close(MessageContext messageContext)
  {
    log.debug(">>>>>>>>>>> Close");    
  }
}
Run Code Online (Sandbox Code Playgroud)

我在服务初始化期间将处理程序添加到处理程序链:

@WebServiceClient(name = "MyService", targetNamespace = "http://www.whatever.com/", wsdlLocation = "file:/path/to/wsdl")
public class …
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws

18
推荐指数
2
解决办法
4万
查看次数

两个类具有相同的XML类型名称"objectFactory"

我们在系统中长期使用JAXB 2.1.我们有一个使用Ant构建的平台,并生成一组部署在OSGi运行时中的bundle.我们使用Java SE 6.

我们在构建过程中使用JAXB从不同的模式生成数据类型.这些类打包在bundle中,并在运行时用于序列化/反序列化内容.此外,我们在运行时在我们的平台中使用JAXB来从用户提供的其他模式生成数据类型(它是一种MDA平台).

在OSGi运行时,我们有一个包含JAXB jar的bundle并导出必要的包.我们使用生成的所有对象工厂的上下文路径创建一个JAXBContext实例,因此我们可以编组/取消编组所有数据类型.

到目前为止一直在工作,但是现在我们正在尝试升级到JAXB (2.2.4)的最新稳定版本,并且我们在尝试在运行时创建上下文时遇到问题.我们得到以下异常:

Two classes have the same XML type name "objectFactory". Use @XmlType.name and @XmlType.namespace to assign different names to them.
    this problem is related to the following location:
        at some.package.ObjectFactory
    this problem is related to the following location:
        at some.other.package.ObjectFactory

    at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:436)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1100)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:143)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:110)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:191)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:187)
    ... 76 more
Run Code Online (Sandbox Code Playgroud)

错误两个类具有相同的XML类型名称"objectFactory",用于在构建过程中生成的每个对象工厂. …

java osgi jax-ws jaxb jaxb2

7
推荐指数
1
解决办法
2万
查看次数

使用JAX-WS进行WSDL运行时验证

我们正在开发一个支持Web服务的MDA平台.用户可以在运行时提供WSDL,我们在内部使用JAX-WS生成所有工件(服务器的服务接口和实现,以及客户端的使用者).

我们希望在用户提供的WSDL文档上添加验证.现在,用户必须使用外部工具(如Oxygen,XMLSpy或Web工具)对其进行验证,但我们希望将其添加为系统的一部分.一个很好的功能是模式验证,包括WSDL的嵌入式模式.

在JAX-WS(RI)中,运行时支持模式验证(使用@SchemaValidation批注),但我们没有找到任何对WSDL验证的支持.

我们已经尝试集成Eclipse的WSDL验证器,但它似乎对我们没有用.

有没有办法用JAX-WS做到这一点?如果没有,是否还有其他可以整合的验证框架?

谢谢

xsd wsdl web-services jax-ws

5
推荐指数
1
解决办法
2948
查看次数

标签 统计

jax-ws ×3

java ×2

web-services ×2

jaxb ×1

jaxb2 ×1

osgi ×1

wsdl ×1

xsd ×1