java中调用包重名的问题

suntongxin 2013-11-13 09:31:08
加载的两个不同的xmlbean的jar包,包含两个同名的方法,包名不同,调用这俩个jar包中的方法时候写上全路径还是会报错,怎么处理
...全文
787 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 6 楼 u012463264 的回复:
不会吧 怎么用的 ,贴出来。


图片中sample.xmlbean.MessageDocument doc处报错,错误类型在楼上有
别闹腰不好 2013-11-13
  • 打赏
  • 举报
回复
不会吧 怎么用的 ,贴出来。
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 4 楼 huxiweng 的回复:
带上包名还不对?
嗯,我调用的时候写的是把包名带上的,但是还是会报错 错误类型 java.lang.ClassCastException: noNamespace.impl.MessageDocumentImpl cannot be cast to sample.xmlbean.MessageDocument
teemai 2013-11-13
  • 打赏
  • 举报
回复
带上包名还不对?
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
报错那会报出来的什么? 类型不对? 还是class not found呢?
一个类被强制转换成另外一个类
失落夏天 2013-11-13
  • 打赏
  • 举报
回复
报错那会报出来的什么? 类型不对? 还是class not found呢?
xiejiangmi 2013-11-13
  • 打赏
  • 举报
回复
不知道
linuxca 2013-11-13
  • 打赏
  • 举报
回复
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
package com.sun.server;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class QCJChargeServerTest extends Thread {
	private Socket server;
	public QCJChargeServerTest(Socket s){
		this.server=s;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			ServerSocket serverSocket=new ServerSocket(1234);
			QCJChargeServerTest test=new QCJChargeServerTest(serverSocket.accept());
			test.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	private String getXML() throws Exception{
		File file=new File("C:/Users/Administrator/Desktop/QCJChargeRes.xml");
		String XMLMessage="";
		InputStreamReader isr=new InputStreamReader(new FileInputStream(file), "GBK");
		BufferedReader read=new BufferedReader(isr);
		String temp;
		while((temp=read.readLine())!=null){
			XMLMessage=XMLMessage+temp;
		}
		return XMLMessage;
	}
	public void run(){
		try {
			System.out.println("进入server端的run()");
			//BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
			//Thread.sleep(5000);
			//System.out.println(in.readLine());
			String tcpHead="SendIDMessageClassMessageTypeReqDateMessageID00765D020698BFF7ADF592072E3AB6E9A7FDD";
			String TCPMessage=tcpHead+this.getXML();
			DataOutputStream dos=new DataOutputStream(server.getOutputStream());
			dos.writeUTF(TCPMessage);
			dos.flush();
			System.out.println(TCPMessage);
			//System.out.println(TCPMessage);
			
			
		}  catch (Exception e) {
			e.printStackTrace();
		}
	}

}
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
package com.sun.client;


import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cryptix.jce.provider.MD5;

public class QCJCharge extends Thread{
	private String ip="";
	private int port;
	private Socket client;
	private Connection dbconn;
	private String SendID_out="",SendID_in="";
	private String ReceiverID_out="",ReceiverID_in="";
	private String MessageClass_out="",MessageClass_in="";
	private String MessageType_out="",MessageType_in="";
	private String ReqDate_out="",ReqDate_in="";
	private String MessageID_out="",MessageID_in="";
	private String MessageLength_out="";
	private String ReqTime_out="";
	private String Result_in="";
	private String Info_in="";
	private String TradNo_out="",TradNo_in="";
	private String ReturnCode_in="";
	private String ReturnInfo_in="";
	private String AdrNo_out="";
	private String BankNo_out="";
	private String TradTime_out="";
	private String ChannelNo_out="";
	private String TermNo_out="";
	private String OperNo_out="";
	private String ICCardNo_out="";
	private String RaiseMoney_out="";
	private String ICCardBalance_out="";
	private String CardTradNo_out="";
	private String RespseqNo_out="";
	private String CurrencyType_out="";
	private String AccountNo_out="";
	private String RespseqNo_in="";
	private String CustomNo_in="";
	private String ICCardNo_in="";
	private String UserName_in="";
	private String RaiseMoney_in="";
	private String RaiseBalance_in="";
	private String DocumentsNo_in="";
	private String Phone_in="";
	private PreparedStatement pstmt_in,pstmt_out;
	private ResultSet rs;
	
	/**
	 * 构造方法
	 * @param ip
	 * @param port
	 */
	public QCJCharge(String ip,int port){
		this.ip=ip;
		this.port=port;
	}
	public QCJCharge(){}
	/**
	 * 初始化客户端
	 * @param ip
	 * @param port
	 */
	private void InitClient(String ip,int port){
		try {
			client=new Socket(ip,port);
		} catch (Exception e) {
		} 
	}
	/**
	 * 连接数据库
	 */
	private void connDB() {
        try {
        	Class.forName("com.mysql.jdbc.Driver");
			dbconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/temp", "root", "sa");
        } catch (SQLException e) {
        } catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
    }
	/**
	 * 获取数据库里面存储的数据
	 */
	private void getData(){
		this.connDB();
		String sql="select * from temp1";
		try{
		 pstmt_out=dbconn.prepareStatement(sql);
		 rs=pstmt_out.executeQuery();
		while(rs.next()){
			SendID_out=rs.getString("SendID");
			ReceiverID_out=rs.getString("ReceiverID");
			MessageClass_out=rs.getString("MessageClass");
			MessageType_out=rs.getString("MessageType");
			ReqDate_out=rs.getString("ReqDate");
			MessageID_out=rs.getString("MessageID");
			ReqTime_out=rs.getString("ReqTime");
			TradNo_out=rs.getString("TradNo");
			AdrNo_out=rs.getString("AdrNo");
			BankNo_out=rs.getString("BankNo");
			TradTime_out=rs.getString("TradTime");
			ChannelNo_out=rs.getString("ChannelNo");
			TermNo_out=rs.getString("TermNo");
			OperNo_out=rs.getString("OperNo");
			ICCardNo_out=rs.getString("ICCardNo");
			RaiseMoney_out=rs.getString("RaiseMoney");
			ICCardBalance_out=rs.getString("ICCardBalance");
			CardTradNo_out=rs.getString("CardTradNo");
			RespseqNo_out=rs.getString("RespseqNo");
			CurrencyType_out=rs.getString("CurrencyType");
			AccountNo_out=rs.getString("AccountNo");
		
	}}catch(SQLException e){
		}
	try {
		rs.close();
		pstmt_out.close();
		dbconn.close();
	} catch (SQLException e) {
	}
	}
	/**
	 * 对数据长度进行检查
	 */
	private void CheckNumber(){
		this.getData();
		for(int i=0;i<6-MessageID_out.length();i++){
			MessageID_out='0'+MessageID_out;
		}
		
	}
	/**
	 * 产生XML报文
	 */
	private String CreateXML(){
		this.CheckNumber();
		//create Document
		noNamespace.MessageDocument doc=noNamespace.MessageDocument.Factory.newInstance();
		//Add new Header
		noNamespace.MessageDocument.Message.Header header=doc.addNewMessage().addNewHeader();
		header.setSendID(SendID_out);
		header.setReceiverID(ReceiverID_out);
		header.setMessageClass(MessageClass_out);
		header.setMessageType(MessageType_out);
		header.setReqDate(ReqDate_out);
		header.setMessageID(MessageID_out);
		header.setReqTime(ReqTime_out);
		//Add new Body
		noNamespace.MessageDocument.Message.Body body=doc.addNewMessage().addNewBody();
		body.setTradNo(TradNo_out);
		body.setAdrNo(AdrNo_out);
		body.setBankNo(BankNo_out);
		body.setTradTime(TradTime_out);
		body.setReqDate(ReqDate_out);
		body.setChannelNo(ChannelNo_out);
		body.setTermNo(TermNo_out);
		body.setOperNo(OperNo_out);
		body.setICCardNo(ICCardNo_out);
		body.setRaiseMoney(RaiseMoney_out);
		body.setICCardBalance(ICCardBalance_out);
		body.setCardTradNo(CardTradNo_out);
		body.setRespseqNo(RespseqNo_out);
		body.setCurrencyType(CurrencyType_out);
		body.setAccountNo(AccountNo_out);
		String  XMLString=doc.xmlText();
		return XMLString;
	}
	/**
	 * 产生tcp报文
	 * 调用LZ77算法对XMLMessage进行压缩处理
	 * tcp报文中包含的MD5值由联网中心提供的c源程序计算得出
	 */
	private String CreateTCPMessage(){
		
		String TCPMessage="";
		String XMLMessage=this.CreateXML();
		// TODO Auto-generated catch block  LZ77算法没做,数据没有压缩
		MD5 md5=new MD5();
		String strmd5=md5.toMD5(XMLMessage);
		MessageLength_out=String.valueOf(XMLMessage.length());
		for(int i=0;i<6-MessageLength_out.length();i++){
			MessageLength_out='0'+MessageLength_out;
		}
		TCPMessage=SendID_out+MessageClass_out+MessageType_out+ReqDate_out+MessageID_out+MessageLength_out+strmd5+XMLMessage;
		return TCPMessage;
		
		
	}
	/**
	 * 连接server端,进行发送和接收数据
	 */
	public void run(){
		//TODO ip和端口需要更改,使用的是系统定义的socket
		this.InitClient(ip, port);
		try {
			//向server端发送数据部分
			//TODO此处改动过
			//PrintWriter dos=new PrintWriter(client.getOutputStream());
			//dos.write(this.CreateTCPMessage());
			//dos.flush();
			//dos.close();
			//try {
				//Thread.sleep(5000);
			//} catch (InterruptedException e) {
			//}
			
			//从server端获取数据部分
			DataInputStream dis=new DataInputStream(client.getInputStream());
			String TCPMessage=dis.readUTF();
			System.out.println(TCPMessage);
			this.getElement(TCPMessage);
			//dis.close();
			
			
		} catch (UnknownHostException e) {
		} catch (IOException e) {
		}
		try {
			client.close();
		} catch (IOException e) {
		}
	}
	/**
	 * @param TCPMessage
	 */
	private void getElement(String TCPMessage){
		//截取字符串,获得xml报文
		System.out.println("进入getElement");
		String XMLMessage=TCPMessage.substring(82);
		// TODO Auto-generated catch block 解压缩
		try {
			System.out.println("进入xmlbean");
			System.out.println(XMLMessage);
			sample.xmlbean.MessageDocument doc=sample.xmlbean.MessageDocument.Factory.parse(XMLMessage);
			System.out.println("~~~");
			sample.xmlbean.MessageDocument.Message message=doc.getMessage();
			sample.xmlbean.MessageDocument.Message.Header header=message.getHeaderArray(0);
			SendID_in=header.getSendID();
			ReceiverID_in=header.getReceiverID();
			MessageClass_in=header.getMessageClass();
			MessageType_in=header.getMessageType();
			ReqDate_in=header.getReqDate();
			MessageID_in=header.getMessageID();
			Result_in=header.getResult();
			Info_in=header.getInfo();
			sample.xmlbean.MessageDocument.Message.Body body=message.getBodyArray(0);
			TradNo_in=body.getTradNo();
			ReturnCode_in=body.getReturnCode();
			ReturnInfo_in=body.getReturnInfo();
			RespseqNo_in=body.getRespseqNo();
			CustomNo_in=body.getCustomNo();
			ICCardNo_in=body.getICCardNo();
			UserName_in=body.getUserName();
			RaiseMoney_in=body.getRaiseMoney();
			RaiseBalance_in=body.getRaiseBalance();
			DocumentsNo_in=body.getDocumentsNo();
			Phone_in=body.getPhone();
		}catch(Exception e){
			System.out.println(e.toString());
		}
		this.insertData();
	}
	private void insertData(){
		System.out.println("进入insertData");
		System.out.println(SendID_in);
		this.connDB();
		String sql="insert into temp2 values(null,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
		try {
			System.out.println("进入try");
			pstmt_in=dbconn.prepareStatement(sql);
			System.out.println("pstmt");
			pstmt_in.setString(1, SendID_in);
			pstmt_in.setString(2, ReceiverID_in);
			pstmt_in.setString(3, MessageClass_in);
			pstmt_in.setString(4, MessageType_in);
			pstmt_in.setString(5, ReqDate_in);
			pstmt_in.setString(6, MessageID_in);
			pstmt_in.setString(7, Result_in);
			pstmt_in.setString(8, Info_in);
			pstmt_in.setString(9, TradNo_in);
			pstmt_in.setString(10, ReturnCode_in);
			pstmt_in.setString(11,ReturnInfo_in);
			pstmt_in.setString(12,RespseqNo_in);
			//pstmt_in.setString(12, ReqDate_in);
			pstmt_in.setString(13, CustomNo_in);
			pstmt_in.setString(14, ICCardNo_in);
			pstmt_in.setString(15, UserName_in);
			pstmt_in.setString(16, RaiseMoney_in);
			pstmt_in.setString(17, RaiseBalance_in);
			pstmt_in.setString(18,DocumentsNo_in);
			pstmt_in.setString(19, Phone_in);
			pstmt_in.execute();
		} catch (SQLException e) {
			
		}finally{
			try {
				//pstmt_in.close();
				//dbconn.close();
			} catch (Exception e) {
			}
		}
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			QCJCharge testQCJ=new QCJCharge("127.0.0.1",1234);
			testQCJ.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}
上面是通信客户端的代码,下面是通信服务端的编码
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 17 楼 huxiweng 的回复:
[quote=引用 16 楼 u012752546 的回复:] [quote=引用 14 楼 huxiweng 的回复:] [quote=引用 5 楼 u012752546 的回复:] [quote=引用 4 楼 huxiweng 的回复:] 带上包名还不对?
嗯,我调用的时候写的是把包名带上的,但是还是会报错 错误类型 java.lang.ClassCastException: noNamespace.impl.MessageDocumentImpl cannot be cast to sample.xmlbean.MessageDocument [/quote] 你的错是类型转换错啊[/quote] 我是调用了xmlbean方法产生的两个jar包,不同的包名,相同的类名,然后引用jar包的时候哪个jar包放在上面,就默认使用哪个jar包,而这两个jar包必须在同一个类中使用,作用是通信时发送出去的报文格式和接收时候的报文格式[/quote] 你把完整的代码(带代码行数)以及报错的完整信息(源文件的哪一行出错)发出来看下[/quote] 要不你加下我,这边代码挺长的,截图不是特别方便 q 593769030
teemai 2013-11-13
  • 打赏
  • 举报
回复
引用 16 楼 u012752546 的回复:
[quote=引用 14 楼 huxiweng 的回复:] [quote=引用 5 楼 u012752546 的回复:] [quote=引用 4 楼 huxiweng 的回复:] 带上包名还不对?
嗯,我调用的时候写的是把包名带上的,但是还是会报错 错误类型 java.lang.ClassCastException: noNamespace.impl.MessageDocumentImpl cannot be cast to sample.xmlbean.MessageDocument [/quote] 你的错是类型转换错啊[/quote] 我是调用了xmlbean方法产生的两个jar包,不同的包名,相同的类名,然后引用jar包的时候哪个jar包放在上面,就默认使用哪个jar包,而这两个jar包必须在同一个类中使用,作用是通信时发送出去的报文格式和接收时候的报文格式[/quote] 你把完整的代码(带代码行数)以及报错的完整信息(源文件的哪一行出错)发出来看下
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 14 楼 huxiweng 的回复:
[quote=引用 5 楼 u012752546 的回复:] [quote=引用 4 楼 huxiweng 的回复:] 带上包名还不对?
嗯,我调用的时候写的是把包名带上的,但是还是会报错 错误类型 java.lang.ClassCastException: noNamespace.impl.MessageDocumentImpl cannot be cast to sample.xmlbean.MessageDocument [/quote] 你的错是类型转换错啊[/quote] 我是调用了xmlbean方法产生的两个jar包,不同的包名,相同的类名,然后引用jar包的时候哪个jar包放在上面,就默认使用哪个jar包,而这两个jar包必须在同一个类中使用,作用是通信时发送出去的报文格式和接收时候的报文格式
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 14 楼 huxiweng 的回复:
[quote=引用 5 楼 u012752546 的回复:] [quote=引用 4 楼 huxiweng 的回复:] 带上包名还不对?
嗯,我调用的时候写的是把包名带上的,但是还是会报错 错误类型 java.lang.ClassCastException: noNamespace.impl.MessageDocumentImpl cannot be cast to sample.xmlbean.MessageDocument [/quote] 你的错是类型转换错啊[/quote] 嗯,是的,是类型转换错误,就是默认把俩个同名的类中的其中一个强制转换成了另外一个类,但是这种转换是肯定会报错的,两个类中的方法是不一样的
teemai 2013-11-13
  • 打赏
  • 举报
回复
引用 5 楼 u012752546 的回复:
[quote=引用 4 楼 huxiweng 的回复:] 带上包名还不对?
嗯,我调用的时候写的是把包名带上的,但是还是会报错 错误类型 java.lang.ClassCastException: noNamespace.impl.MessageDocumentImpl cannot be cast to sample.xmlbean.MessageDocument [/quote] 你的错是类型转换错啊
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 12 楼 Liuyfly 的回复:
不应该出现这种错误的。还是哪里引用的时候没有写全路径吧
可是我上面贴的图里面就是写的全路径啊,不然也不会编译通过的
Liuyfly 2013-11-13
  • 打赏
  • 举报
回复
不应该出现这种错误的。还是哪里引用的时候没有写全路径吧
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 10 楼 u012463264 的回复:
你现在只是两个包中的类名一样,两个包都要引,再用的时候加上包名用来区分。 如果俩个包的名字一模一样,这样会冲突的。
我试过这种方法的,是没有用的,还是会报错
别闹腰不好 2013-11-13
  • 打赏
  • 举报
回复
你现在只是两个包中的类名一样,两个包都要引,再用的时候加上包名用来区分。 如果俩个包的名字一模一样,这样会冲突的。
suntongxin 2013-11-13
  • 打赏
  • 举报
回复
引用 8 楼 u012463264 的回复:
[quote=引用 7 楼 u012752546 的回复:] [quote=引用 6 楼 u012463264 的回复:] 不会吧 怎么用的 ,贴出来。
图片中sample.xmlbean.MessageDocument doc处报错,错误类型在楼上有[/quote] 你这种用法 也需要引包的 ,如果你调用的是静态方法。 用方法静态导入试试  import static 包名.类名.静态成员变量;[/quote] 我试了一下,还是不起作用,不知道你这个具体是怎么操作的呢,我是直接写了一个import static的语句,要不麻烦你帮我看下?q 593769030
加载更多回复(1)

67,541

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧