Java 在容器外部实例化Springbean(用于测试)

Java 在容器外部实例化Springbean(用于测试),java,unit-testing,spring,ibatis,Java,Unit Testing,Spring,Ibatis,我的applicationcontext.xml中有以下内容 <bean id="IbatisDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> <property name="url" value="jdb

我的applicationcontext.xml中有以下内容

<bean id="IbatisDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@123.210.85.56:1522:ORCL"/>
    <property name="username" value="mydb"/>
    <property name="password" value="mydbpwd"/>
</bean>


<bean id="myMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation" value="classpath:sql-map-config-oracle.xml"/>
  <property name="dataSource" ref="IbatisDataSource"/>
 </bean>
这样做会导致以下错误:

创建名为的bean时出错 类中定义的“myMapClient” 路径资源 [applicationContext.xml]:调用 初始化方法失败;嵌套 例外是 java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException

我不明白为什么它要找那个班?我试着做容器外的所有事情。所以它甚至不应该寻找那个类……但是为了让它工作,我试着寻找一个名为ASException的类,这样我就可以把它放在类路径上,但我在哪里找不到ASException类

有什么建议吗

堆栈跟踪和编译测试/运行测试库的映像

编辑 解决方案: 尽管我认为所有东西都在容器外……但有一件东西不在容器外。
请注意属性configLocation:

<property name="configLocation" value="classpath:sql-map-config-oracle.xml"/>

sql-map-config-oracle.xml的实际内容是

<sqlMapConfig>
   <settings enhancementEnabled="true" useStatementNamespaces="true" />
    <transactionManager type="JDBC">
        <dataSource type="JNDI">
            <property name="DataSource" value="my/jndi/mydb" />
        </dataSource>
    </transactionManager>
<sqlMap resource="somemapping.xml"/>
</sqlMapConfig>

JNDI的东西不需要在那里

sql-map-config-oracle.xml应该是:

<sqlMapConfig>
   <settings enhancementEnabled="true" useStatementNamespaces="true" />
        <sqlMap resource="somemapping.xml"/>
</sqlMapConfig>

编译时发现此类,但运行时未发现此类:

com/iplanet/ias/admin/common/ASException

因此,当您运行该程序时,它似乎找不到该类,该类属于您正在使用的Sun应用程序或门户服务器。简而言之:这是一个类路径错误。

正如@Cletus所说的,
org.springframework.orm.ibatis.SqlMapClientFactoryBean
是用
com.iplanet.ias.admin.common.ASException
编译的,但现在你的类路径中没有它——Spring找不到它。您应该查看
SqlMapClientFactoryBean
的源代码,以查看调用
ASException
的位置——Spring应该有一个包含所有依赖项的dist,在进行调查时,您也可以查看其中的内容。

您如何确定它是在编译过程中发现的?。错误发生在bean的初始化过程中。这在编译时无论如何都不会发生,对吗。。。尽管我不知道它需要哪个jar文件,但我认为编译和运行类路径中都缺少jar。不仅仅是运行(或者我们不能确定),区分ClassNotFoundException和ClassDefNotFoundError很重要。第一种情况发生在,比如,您试图通过反射实例化一个类,但找不到它时。第二种情况是因为某些代码是针对运行时不再存在的类编译的。这就是你所拥有的。所以你可能会发现你没有包括所有你需要的罐子。就像您包含一个jar,但不包括它所依赖的jar,等等。下载完整的springframework with src。在src文件夹中搜索所有类中的字符串“AsException”…找到了nada。因此仔细观察,这一定是一个特定于容器的错误iplanet是Sun品牌的服务器等(Glassfish等)。如果您像在Netbeans中的Tomcat实例上一样测试这个“容器外”,那么这里似乎还有一些容器引用。我认为,
ias
是iPlanet应用程序服务器,您将得到一个
ASException
应用程序服务器异常。我将创建一个新的Netbeans项目,导入ur代码、Spring iBatis依赖项,当然还有Spring(及其依赖项)你的代码依赖性在Spring中找不到。我们没有得到一个
ASEXception
,但你知道我的意思——而是没有:)不,我明白你的意思……基本上从零开始:)现在也要尝试一下。。我还不如让它工作呢!不是从头开始…而是尝试“从头开始思考”。谢谢你的帮助
com/iplanet/ias/admin/common/ASException