【问题标题】:Same Package, Same Class in two Maven Projects a WAR and a JAR, classpath issue两个 Maven 项目中的相同包,相同类一个 WAR 和一个 JAR,类路径问题
【发布时间】:2013-10-16 00:11:30
【问题描述】:

我遇到了一些类路径问题。我有一个 Web 应用程序,它是一个 Web 服务。它使用 JaxB 和 CXF。 Web 服务依赖于另一个 JAR,它是一个 Web 服务客户端。现在客户端和服务代码都是使用 wsdl2java 插件生成的。问题如下:

Parent WebService WAR
--PackageA
  --ClassB
Dependency Jar
--PackageA
  --ClassB

因此它们都具有相同的包和相同的类名,并且由于它们是由插件生成的,因此很难重构其中一个包以使其不相同。 WebService 调用客户端,并在客户端代码中从 Web 服务初始化父类 B,而不是从 Web 服务客户端 Jar 初始化类 B。这个 ClassB 中的唯一问题是他们有一个采用不同参数的方法,在一个 B 类中它采用 Date,而在另一个 classB 中它采用 XmlGregorianCalendar。所以在调用客户端时我没有得到任何方法异常。

这是我到目前为止没有运气的尝试:

1:在客户端 jar 中,我尝试提供完整的包和类名来初始化 ClassB

2:在客户端 jar 中,我尝试使用 Spring bean 连接类,但令人惊讶的是,它仍然是从 webService 而不是客户端连接类

3:在 Web 服务 ClassB 中,我尝试添加采用正确参数的相同方法。这部分有效,但会导致另一个不好的异常。

期待您的帮助。谢谢!

解决了问题,方法是将额外的 args 传递给 wsdl2java 插件,同时根据 user2880879 建议从 wsdl 生成类,如下所示:

<extraarg>-p</extraarg>
<extraarg>http://www.example.com=mypackagename</extraarg>  

【问题讨论】:

    标签: java maven jaxb cxf eclipse-classpath


    【解决方案1】:

    我相信你是使用自顶向下的方法创建 web 服务,意味着首先使用 jaxws 注释编写 java 类,然后使用 cxf maven 插件或 ant 创建 wsdl,并使用此 wsdl 创建客户端?

    如果您采用这种方法,那么您可以在生成 Web 服务客户端代码时提供绑定文件。 click here知道什么是绑定文件,怎么写。

    在此绑定文件中,您可以指定要为客户端代码更改的包名称。

    【讨论】:

    • 嘿感谢您的回复,我会尝试看看这是否有效。看起来很有前途!
    • 成功了,再次感谢!
    猜你喜欢
    • 2013-10-20
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多