我正在开发一个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数据。
答案 0 :(得分:0)
班级com.sun.xml.internal.ws.developer.StreamingDataHandler
位于rt.jar
。
无论如何,您不应在您的应用程序中使用sun
或com.sun
个包。
这篇Oracle文章说明了原因:Why Developers Should Not Write Programs That Call 'sun' Packages。
这些软件包不是官方和支持的Java规范的一部分。使用它们可能会导致不同版本的Java或不同实现(IBM和HP等专有实现)之间的不兼容。实际上,你不确定你在一个实现中获得的sun class是否会成为另一个实现的一部分。