获取ClassNotFoundException:StreamingDataHandler

时间:2013-02-11 17:51:55

标签: eclipse jax-ws jboss7.x mtom

我正在开发一个MTOM流媒体网络服务,并遇到了以下问题。 我在webservice实现类中有以下代码:

@Override
public void fileUpload(String name, DataHandler data) 
{
    System.out.println("INVOKING FILE UPLOAD!");

    try
    {
           StreamingDataHandler dh = (StreamingDataHandler) data;
           File file = File.createTempFile("result.txt", "");
           dh.moveTo(file);
           dh.close();
           System.out.println("TEMP FILE WITH DATA: " + file.getAbsolutePath());
    } 
    catch(Exception e) 
    {
           throw new WebServiceException(e);
    }

}

问题是Eclipse提示我以下列方式导入StreamingDataHandler(编译和部署 - 确定):

import com.sun.xml.internal.ws.developer.StreamingDataHandler;

但是,我在运行时收到ClassNotFoundException。你能告诉我应该导出什么,以便它只是有效吗?我试图将jaxws-ri.jar和stax-ex.jar(v 2.2.7)包含在我的模块中,但没有任何运气(得到其他错误)。此外,StreamingDataHandler类位于不同的包中(与Eclipse提示相同,但​​没有“内部”)。我的项目方面是:动态Web模块3.0,Java 1.7,Javascript 1.0,JBoss Web服务核心,服务器运行时是JBoss 7.1.1。我怎么能解决这个混乱? THX。

更新:(解决方案)

使用此代码编写数据:

InputStream is = data.getInputStream(); // DataHandler
File file = File.createTempFile("result.txt", "");
OutputStream os = new FileOutputStream(file.getAbsolutePath());

byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1)
{
    os.write(buffer, 0, bytesRead);
}
os.flush();
os.close();

刚刚在两台主机之间发送了5.9Gb数据。

1 个答案:

答案 0 :(得分:0)

班级com.sun.xml.internal.ws.developer.StreamingDataHandler位于rt.jar

无论如何,您不应在您的应用程序中使用suncom.sun个包。

这篇Oracle文章说明了原因:Why Developers Should Not Write Programs That Call 'sun' Packages

这些软件包不是官方和支持的Java规范的一部分。使用它们可能会导致不同版本的Java或不同实现(IBM和HP等专有实现)之间的不兼容。实际上,你不确定你在一个实现中获得的sun class是否会成为另一个实现的一部分。