Sun SAAJ SOAP实现的替代方法 - java

我正在寻找Sun SAAJ以外的其他SOAP(javax.xml.soap)实现。这样做的原因是因为我想在IBM JDK 5驱动的Tomcat AS上部署JAX-WS WebService,但是已知的问题是Sun SAAJ实现取决于重新分配的Xerces类(请参见Ref Impl does not work with IBM JDK和SAAJ test cases no longer work with IBM's SDK),这是唯一的出路。是使用自定义Maven配置文件来提取com.sun.xml.parsers:jaxp-ri,例如:

<profiles>
    <profile>
        <id>pre-jdk5-profile</id>

        <activation>
            <jdk>(,1.4]</jdk>
        </activation>

        <dependencies>
            <dependency>
                <groupId>com.sun.xml.parsers</groupId>
                <artifactId>jaxp-ri</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>

我想删除此概要文件,而仅用在任何地方都可以使用的SOAP实现替换它。

我想供应商SOAP实现可能随Apache Axis / Apache CXF(基于IBM SOAP4J)或JBoss AS一起提供-请根据我的偏好提供信息:

  • 实现应易于与其他人员分开(最好是一个轻量级的jar)。
  • 实现应支持SOAP messages with attachments。
  • 实现应与Java5字节码兼容。
  • 如果Maven Central中提供了实现,那么这是一个加号。
  • 参考文献:

  • SOAP with Attachments API for Java
  • How does JBossWS compare to other SOAP stacks
  • Alternative SOAP implementation besides those offered by Microsoft
  • 参考方案

    浏览后,我得出了以下可能的问题解决方案。我已经使用grepcode.com探索了javax.xml.soap.MessageFactory的后代。

    除了标准的com.sun.xml.messaging.saaj.soap.MessageFactoryImpl之外,我还发现(如预期的那样):

    org.apache.axis2.saaj.MessageFactoryImpl 中的

  • org.apache.axis2:axis2-saaj:1.6.1。该JAR通过META-INF\services\javax.xml.soap.MessageFactoryMETA-INF\services\javax.xml.soap.MetaFactory正确地宣布了工厂,因此不需要其他调整。该版本(根据Maven Central)于2011年发布,建议很少依赖。
  • JBoss 3.x中org.jboss.ws.core.soap.MessageFactoryImpl中的

  • org.jboss.ws.native:jbossws-native-core:3.2.1.Beta2。看起来已经很老了,也许JBoss不再支持它的开发了,因为我能够在maven Central(here)之外找到这个jar。不推荐使用很多依赖项,大小为1.8M。
  • org.apache.openejb.server.webservices.saaj.MessageFactoryImpl 中的

  • org.apache.openejb:openejb-webservices:4.0.0-beta-2org.apache.geronimo.webservices.saaj.GeronimoMessageFactory 中的org.apache.geronimo.modules:geronimo-webservices:3.0-M1。实际上,这些工厂中的任何一个都是Axis2或Sun实现的wrapper / runtime_locator(请参见 SaajFactoryFinderSAAJFactoryFinder )。不考虑。
  • 底线:唯一可接受的替代方法是Axis2实现。

    与哪些运算符>>兼容 - java

    我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

    什么是com.sun.proxy。$ Proxy - java

    我已经看到,当错误在不同的框架(例如,实现EJB规范的框架或某些JPA提供程序)的深层发生时,stacktrace包含诸如com.sun.proxy.$Proxy之类的类。我知道什么是代理,但是我正在寻找更技术性和更特定于Java的答案。他们是什么? 如何创建? 与JVM有什么关系?它们是特定于JVM实现的吗? 参考方案 代理是在运行时创建和加载的类。这些类…

    JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

    我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

    Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

    JAVA:字节码和二进制有什么区别? - java

    java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…