DataSource的创建过程

public class TestDataSource {
	
	public static void main(String[] args) throws SQLException {
		 oracle.jdbc.pool.OracleDataSource ds=new oracle.jdbc.pool.OracleDataSource();
         ds.setServerName("192.168.1.211");
         ds.setDatabaseName("legiondev");   //数据库存名
         ds.setDriverType("oci");  //要使用的JDBC驱动程序(OracleDatasore的扩展)
         ds.setURL("jdbc:oracle:thin:@192.168.1.211:1521:legiondev"); //指定数据库的URL(OracleDataSource的扩展)
         ds.setDataSourceName("");     //底层数据源的名称
         ds.setNetworkProtocol("tcp");//用于数据库通信的协议
         ds.setPortNumber(1521);//端口号
         ds.setUser("cmfkmuser");
         ds.setPassword("password");
         try {
			Connection conn=((javax.sql.DataSource)ds).getConnection();
			if(conn != null) {
				System.out.println("DataSource is true");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
 
在 WebService 中使用 `byte[]` 创建数据源(DataSource)是一种常见的处理二进制文件传输的方式,尤其适用于跨服务调用时的文件流转场景。通过将字节数组封装为 `DataSource` 对象,并结合 `DataHandler`,可以实现基于 JAX-WS 的文件传输。 以下是一个典型的创建方式: ```java public DataSource createDataSourceFromBytes(final byte[] fileBytes, final String fileName, final String contentType) { return new DataSource() { @Override public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(fileBytes); } @Override public OutputStream getOutputStream() throws IOException { return null; } @Override public String getContentType() { return contentType; } @Override public String getName() { return fileName; } }; } ``` 该方法接收字节数组、文件名和内容类型作为参数,并返回一个实现了 `DataSource` 接口的对象[^2]。其中: - `getInputStream()` 返回基于字节数组的输入流,用于读取数据; - `getOutputStream()` 返回空值,表示不支持写入; - `getContentType()` 定义文件的内容类型,例如 `"application/pdf"` 或 `"image/png"`; - `getName()` 返回文件名称,通常用于标识传输中的文件。 创建完 `DataSource` 后,可以将其封装到 `DataHandler` 中,以便用于 WebService 调用: ```java DataHandler dataHandler = new DataHandler(createDataSourceFromBytes(fileBytes, "example.pdf", "application/pdf")); ``` 这一机制常用于中间服务(如项目 B)接收 HTTP 请求上传的文件后,再通过 WebService 方式转发给下游服务(如项目 C)的场景中。它保证了文件在不同通信协议之间的一致性流转。 此外,在 .NET 环境下类似的逻辑也可以通过 `MemoryStream` 实现,例如将字符串或字节数组反序列化为对象数组的过程: ```csharp Stream stream = new MemoryStream(Encoding.Default.GetBytes(strentites)); XmlSerializer xml = new XmlSerializer(typeof(Entity[])); Entity[] entities = (Entity[])xml.Deserialize(stream); ``` 这种模式与 Java 中基于 `byte[]` 构建数据源的理念一致,均体现了多层分布式系统中对数据格式统一处理的需求[^3]。 ### 示例:完整文件传输流程 1. **接收 HTTP 文件上传请求**(Spring MVC 示例): ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { byte[] fileBytes = new byte[0]; try { fileBytes = file.getBytes(); } catch (IOException e) { e.printStackTrace(); } DataSource dataSource = createDataSourceFromBytes(fileBytes, file.getOriginalFilename(), file.getContentType()); DataHandler dataHandler = new DataHandler(dataSource); // 调用 Webservice 方法,传递 dataHandler webserviceClient.sendFile(dataHandler); return "File uploaded and sent to webservice"; } ``` 2. **Webservice 客户端调用方法**(JAX-WS 示例): ```java @WebServiceClient(name = "FileTransferService") public class FileTransferService extends Service { public void sendFile(DataHandler dataHandler) { // 实际调用远程 WebService 方法 } } ``` 上述流程展示了如何从 HTTP 请求中获取文件字节流,并通过封装为 `DataSource` 和 `DataHandler` 用于 WebService 调用,从而实现跨协议的数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值