2009-12-23 79 views
4

更新:我已将我的问题提交给CXF用户的邮件列表这里使用来自java web开始的CXF web服务

更新:我目前已经签署了所有的罐子。我仍然无法以可以找到WSDL的方式获取CXF设置。我最后的尝试是将WSDL放置在我的WAr文件中,以便通过Web浏览器访问它。我将客户端中的wsdllocation设置为URL(http://www.example.com/app/example.wsdl)。我现在得到以下例外:

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError 
at com.sun.xml.internal.ws.util.xml.XmlUtil.createDefaultCatalogResolver(Unknown Source) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(Unknown Source) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source) 
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Unknown Source) 
at javax.xml.ws.Service.<init>(Unknown Source) 

谷歌搜索几乎没有什么关于此。

我正在使用Apache CXF从给定的WSDL创建Web服务客户端。我试图访问该服务时遇到了问题但是,我得到这个异常:

Can not initialize the default wsdl from ../resource/example.wsdl 
Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read) 
at java.security.AccessControlContext.checkPermission(Unknown Source) 
at java.security.AccessController.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source) 

我不签我的网络启动应用程序,也不会喜欢,因为我不是从客户端的机器访问任何资源。提到的WSDL包装在我的罐子里。问题是由CXF生成的客户端代码造成的:

URL url = null; 
    try { 
     url = new URL("../resource/example.wsdl"); 
    } catch (MalformedURLException e) { 
     System.err.println("Can not initialize the default wsdl from ../resource/example.wsdl"); 
     // e.printStackTrace(); 
    } 
    WSDL_LOCATION = url; 

如何正确地将CXF指向此WSDL?我也担心类上的WebService注释:

@WebServiceClient(name = "Example", 
       wsdlLocation = "../resource/example.wsdl", 
       targetNamespace = "http://services.example.com/") 

我还需要更改吗?

回答

1

经过一些错误和实验,我已经设法让一切正常工作。首先,请确认cxf.jarwsdl4j.jar实际上在您的类路径中。我以为我已经验证了这一点,但是因为我是通过webstart在jar中实例化客户端,而这本身就是一个WAR,所以我在构建过程中搞乱了cxf运行时的位置。另外,在指定wsdl位置时,我必须使用"classpath:my.wsdl"。我让自己变得简单,只需将wsdl放在与我的源代码相同的位置即可。

希望这可以帮助某个人可能在某个时刻做同样的事情!

2

您将需要将该wsdlLocation更改为类路径:引用。

使用-wsdlLocation如图所示here

+0

我对这个值的确切用途是什么? WSDL位于我的jar中,只是指定wsdl名称会导致一个安全异常,因为它试图从user.dir加载。 – Casey 2009-12-29 16:49:14

+0

一个classpath:/org/foo/bar.wsdl路径,我想。 – bmargulies 2009-12-29 18:47:57

+0

我尝试使用classpath:example.wsdl作为-wsdlLocation的输入,并且在运行它时发生此异常: 无法从classpath初始化默认wsdl:WEXAuth.wsdl 线程“AWT-EventQueue-0”java中的异常.security.AccessControlException:访问被拒绝(java.util.PropertyPermission user.dir读取) – Casey 2009-12-29 22:09:59