小编sam*_*ake的帖子

在单元测试中覆盖自动装配的Bean

有一种简单的方法可以在特定的单元测试中轻松覆盖自动装配的bean吗?在编译类中只有一个类型的bean,因此在这种情况下自动装配不是问题.测试类将包含额外的模拟.在运行单元测试时,我只想指定一个额外的配置,基本上说,运行此使用测试时使用此模拟而不是标准bean.

对于我需要的内容,配置文件看起来有点矫枉过正,我不确定使用Primary注释可以实现这一点,因为不同的单元测试可能有不同的模拟.

spring spring-annotations spring-boot

49
推荐指数
4
解决办法
6万
查看次数

读取jar文件中的zip文件

以前我们的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文件移回核心项目?

java zip jar

8
推荐指数
2
解决办法
9810
查看次数

解组JAXB时无效的JAXP API

我有一个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)

java jaxb jaxp

6
推荐指数
2
解决办法
1万
查看次数

在CXF代理客户端上设置超时

我在CXF中通过JAXRSClientFactoryBean.create创建了一个JAX-RS客户端.如何设置连接/接收超时?

我想我需要掌握管道,但无法弄清楚如何.这个项目没有使用Spring.

cxf jax-ws

5
推荐指数
2
解决办法
4327
查看次数

从Maven中排除TestNG组

我有一些慢速测试依赖于我不希望每次使用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)

然而,两个测试仍然运行.我无法弄清楚我做错了什么.

testng surefire maven

3
推荐指数
1
解决办法
8091
查看次数

获取 Apache Camel 路由中的前一条消息

我对骆驼很陌生,所以也许我的处理方式是错误的,但我将消息从一个端点路由到另一个端点,并在途中转换它们。然而,下一阶段是向管道添加身份验证。我有一项跟踪经过身份验证的用户的服务。我的计划是,在路线的第一阶段,添加一个过滤器来检查当前用户是否经过身份验证。如果用户不是,我想将消息转换为身份验证请求并将其发送到我的端点。到目前为止一切都很好,但是,在身份验证之后(如果成功)我想将原始消息发送到管道中。这是可以做的事情吗?

我的路线的简化版本是:

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。

apache-camel

3
推荐指数
1
解决办法
1184
查看次数