将jar中的wsdl与CXF wsdl2java绑定

将jar中的wsdl与CXF wsdl2java绑定,jar,classpath,cxf,wsdl2java,Jar,Classpath,Cxf,Wsdl2java,我正在开发一个实现,它将使用我从供应商那里获得的wsdl。我们的项目运行在Spring和CXF上,我想创建一个jar,它允许我访问该供应商的wsdl服务,但我遇到了类路径问题 使用CXF的wsdl2java,我能够生成如下行为的代码: WSDL_LOCATION = new URL("file:SomeService.wsdl"); 该服务要求wsdl位于类路径中,但我希望将其捆绑在jar中,以便它可以作为独立的jar分发。使用wsdl2java工具,我能够在URL实例化中指定我想要的字符串。

我正在开发一个实现,它将使用我从供应商那里获得的wsdl。我们的项目运行在Spring和CXF上,我想创建一个jar,它允许我访问该供应商的wsdl服务,但我遇到了类路径问题

使用CXF的wsdl2java,我能够生成如下行为的代码:

WSDL_LOCATION = new URL("file:SomeService.wsdl");
该服务要求wsdl位于类路径中,但我希望将其捆绑在jar中,以便它可以作为独立的jar分发。使用wsdl2java工具,我能够在URL实例化中指定我想要的字符串。但是,我还没有在jar中找到一个可以工作的自定义字符串和wsdl文件位置的组合

我实现此功能的唯一方法是将wsdl文件放在SomeService.class所在的文件夹中,并使用以下行:

WSDL_LOCATION = TrackService.class.getResource("TrackService_v4.wsdl");
但是,这样做的缺点是我必须手动编辑java代码并自己编译。这是不可取的,因为我们最终希望将此过程作为maven构建的一部分,并让wsdl2java自动生成和编译

我同意将wsdl放在jar中的任何位置,但我不知道如何传递给wsdl2java,使其引用jar中的文件


有人对此有任何建议或经验吗?

我遇到了同样的问题-我有以下解决方法,但我仍在寻找更干净的方法

  • 将您的wsdl保存在src/main/resources/wsdl中

  • 创建TrackService时,请执行以下操作:

    URL wsdlUrl=TrackService.class.getResource(“/wsdl/TrackService_v4.wsdl”); TrackService=新的TrackService(wsdlUrl)


  • 理想的解决方案是将位置作为
    元素传递到CXF wsdl2java插件中。然后您的客户机代码可以调用默认构造函数。但是,生成的存根代码不允许您指定类路径上的wsdl文件。

    您需要指定类路径wsdl位置,如下所示,以生成使用ClassLoader将此wsdl加载为类路径资源的存根:

    
    org.apache.cxf
    cxf-codegen插件
    2.4.3
    org.apache.cxf
    cxf rt绑定soap
    2.4.3
    生成源
    生成源
    ${project.build.directory}/generated sources/cxf
    ${basedir}/yoursdl.wsdl
    **-wsdlLocation**
    **类路径:yoursdl.wsdl**
    wsdl2java
    
    以同样的方式解决:

     URL wsdl = getClass().getResource("wsdl/greeting.wsdl");
     SOAPService service = new SOAPService(wsdl, serviceName);
    
    提供的另一个选项是JaxWsProxyFactoryBean:

    JaxWsProxyFactoryBean proxyFactory = new JaxWsProxyFactoryBean();
    proxyFactory.setServiceClass(MyService.class);
    proxyFactory.setWsdlLocation("/wsdl/MyService.wsdl");
    
    如果还需要调整端点URL,则可以添加:

    proxyFactory.setAddress("http://192.168.0.2:6666/");
    

    对我来说,理想的解决方案是,使用我制作的为WSDL提供存根的JAR的人不必知道任何关于WSDL文件的信息。我同意您的解决方法(这与我在文章中提到的相同),但我不想在JAR之外指定任何关于.wsdl文件的内容。这给出了您需要打包wsdl文件的原因-。至少他们正在考虑将来把它弄干净一点。这是有道理的。我不再积极参与我需要这个功能的项目,但我会接受你的回答,因为它似乎合理地解决了这个问题。谢谢