这两天上司让我编一个程序,读取数据库记录并远程调接口传xml报文,处理返回结果。
想想没啥难的,就二话不说的写起程序来了。结果竟然用了一天多时间才搞定,无比郁闷呐。还是记录下来方便自己查看,并且分享大家。jdk用的1.5.0_22版本。
期间用apache的httpclient也做过,也没有成功,对端一直给我返回个空指针异常,网上怎么查都查不出来个结果。
后来,反编译对端的class后,简直崩溃呀。。。原来对端获取报文方式是request.getParameter("$xml");
用到了两个jar包一起传上来,一个oracle驱动包,一个dom4j解析xml包。
在命令窗口运行,必须配置好环境变量.
直接在命令窗口配置当前命令窗口可用范围的classpath.
注意classpath等号后面的.;是必须要的
set classpath=.;C:\Program Files\java\jdk1.5.0_22\lib\dt.jar;C:\Program Files\java\jdk1.5.0_22\lib\tools.jar;C:\Program Files\java\jdk1.5.0_22\lib;C:\httpxml\oracle_jdbc.jar;C:\httpxml\dom4j.jar javac HttpURLConnectionTest.java java HttpURLConnectionTest http://远程接口地址:端口/接收报文类 数据库ip 数据库sid 数据库用户名 数据库密码
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* 远程调用接口发送报文
* 2012-03-14
* @author mapengwei
* @version 1.0
*/
public class HttpURLConnectionTest {
//数据库连接对象
private Connection conn = null;
/**
* 查询数据库所有未处理记录
* @param dbip 数据库地址
* oid oracle数据库sid
* username 数据库用户名
* password 数据库密码
* @throws ClassNotFoundException
* SQLException
* @return List 返回List结果集
*/
@SuppressWarnings("unchecked")
public List query(String dbIP,String oid,String userName,String passWord) throws ClassNotFoundException, SQLException {
List list = new ArrayList();
//加载oracle数据库驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
if(null=&