有一种简单的方法可以在特定的单元测试中轻松覆盖自动装配的bean吗?在编译类中只有一个类型的bean,因此在这种情况下自动装配不是问题.测试类将包含额外的模拟.在运行单元测试时,我只想指定一个额外的配置,基本上说,运行此使用测试时使用此模拟而不是标准bean.
对于我需要的内容,配置文件看起来有点矫枉过正,我不确定使用Primary注释可以实现这一点,因为不同的单元测试可能有不同的模拟.
以前我们的Web应用程序中有一些zip文件.我们希望在zip文件中削减特定的文本文档.这不是问题:
URL url = getClass().getResource(zipfile);
ZipFile zip = new ZipFile(url.getFile().replaceAll("%20", " "));
Entry entry = zip.getEntry("file.txt");
InputStream is = zip.getInputStream(entry);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是我们已经将这些zip文件移动到另一个模块中,并希望将它们打包到jar中.不幸的是,创建ZipFile现在失败了.我可以获得一个InputStreamzip:但我无法获得条目本身的输入流.
InputStream is = getClass().getResourceAsStream(zipfile);
ZipInputStream zis = new ZipInputStream(is);
ZipEntry entry = zis.getNextEntry();
while (entry != null && !entry.getName().equals("file.txt")) {
entry = zis.getNextEntry();
}
Run Code Online (Sandbox Code Playgroud)
但我无法获得条目本身的输入流.我尝试找到条目的长度并从中获取下一个n字节,ZipInputStream但这对我不起作用.似乎读取的所有字节都是0.
有没有办法解决这个问题,还是我必须将zip文件移回核心项目?
我有一个JAXB对象,我可以解组很好.但是,如果我添加一个使用@XmlAnyElement注释的Element []字段,则在尝试解组时会抛出:
java.lang.IllegalStateException:您正在运行无效的JAXP API或实现.需要JAXP api /版本1.3.1(包含在JDK6中)或更高版本的实现.如果你使用ant,请确保使用ant 1.7.0或更高版本 - 旧版本的ant包含JAXP api/impl版本1.2(在xml-apis.jar中).如果要继续使用较旧的ant版本,则必须将其配置为使用更高的JAXP api/impl版本.
这是通过我通过Eclipse插件运行的TestNG测试运行的.我正在运行1.6 JDK并配置maven以排除旧版本的xml-apis jar但是我似乎无法让它工作.我假设我仍然从某个地方拾取不兼容的库版本,但不知道从哪里来.
直接通过Eclipse运行我得到:
29-Aug-2013 10:04:08 com.sun.xml.bind.v2.util.XmlFactory createTransformerFactory
SEVERE: null
java.lang.AbstractMethodError: javax.xml.transform.TransformerFactory.setFeature(Ljava/lang/String;Z)V
at com.sun.xml.bind.v2.util.XmlFactory.createTransformerFactory(XmlFactory.java:155)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.createTransformerHandler(JAXBContextImpl.java:747)
at com.sun.xml.bind.v2.runtime.unmarshaller.DomLoader$State.<init>(DomLoader.java:75)
at com.sun.xml.bind.v2.runtime.unmarshaller.DomLoader.startElement(DomLoader.java:118)
at com.sun.xml.bind.v2.runtime.unmarshaller.ProxyLoader.startElement(ProxyLoader.java:60)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:501)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:480)
at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:150)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:218)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:190)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184)
at com.gtspt.vrs.parser.AbstractParserTest.unmarshal(AbstractParserTest.java:33)
at com.gtspt.vrs.parser.AbstractParserTest.testParser(AbstractParserTest.java:26)
at com.gtspt.vrs.parser.TestResultsParser.testParser(TestResultsParser.java:17) …Run Code Online (Sandbox Code Playgroud) 我在CXF中通过JAXRSClientFactoryBean.create创建了一个JAX-RS客户端.如何设置连接/接收超时?
我想我需要掌握管道,但无法弄清楚如何.这个项目没有使用Spring.
我有一些慢速测试依赖于我不希望每次使用Maven构建项目时都运行的数据库.我已经将excludedGroups元素添加到我的pom文件中,如http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#excludedGroups所述,但我似乎无法使其正常工作.
我创建了一个最小的项目.这是pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>exclude</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<excludedGroups>db</excludedGroups>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.14</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
这些是两个测试类:
public class NormalTest {
@Test
public void fastTest() {
Assert.assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class DatabaseTest {
@Test(groups={"db"})
public void slowTest() {
Assert.assertTrue(false);
}
}
Run Code Online (Sandbox Code Playgroud)
然而,两个测试仍然运行.我无法弄清楚我做错了什么.
我对骆驼很陌生,所以也许我的处理方式是错误的,但我将消息从一个端点路由到另一个端点,并在途中转换它们。然而,下一阶段是向管道添加身份验证。我有一项跟踪经过身份验证的用户的服务。我的计划是,在路线的第一阶段,添加一个过滤器来检查当前用户是否经过身份验证。如果用户不是,我想将消息转换为身份验证请求并将其发送到我的端点。到目前为止一切都很好,但是,在身份验证之后(如果成功)我想将原始消息发送到管道中。这是可以做的事情吗?
我的路线的简化版本是:
from("seda:in").
filter(method(Authentication.class, "isNotAuthenticated")).
bean(AuthenticationTransformer.class)
to("cxfbean:out")
.end()
.bean(RequestTransformer.class)
.to("cxfbean:out")
Run Code Online (Sandbox Code Playgroud)
相同的消息将被发送到两个转换器 bean。