小编Puc*_*uce的帖子

XMLStreamWriter:缩进

是否真的没有办法直接使用javax.xml.stream.XMLStreamWriter(Java SE 6)编写格式化的XML?这真是令人难以置信,因为其他XML API(如JAXB和一些DOM库)能够做到这一点.即使.NET XMLStreamWriter等效也能够使用此AFAIK(如果我没记错的话,该类是System.Xml.XmlTextWriter).

这意味着我唯一的选择是重新分析XML以生成格式化输出?

例如:

            StringWriter sw = new StringWriter();
    XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newFactory();
    XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(sw);
    writeXml(xmlStreamWriter);
    xmlStreamWriter.flush();
    xmlStreamWriter.close();

    TransformerFactory factory = TransformerFactory.newInstance();

    Transformer transformer = factory.newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

    StringWriter formattedStringWriter = new StringWriter();
    transformer.transform(new StreamSource(new StringReader(sw.toString())), new StreamResult(formattedStringWriter));
    System.out.println(formattedStringWriter);
Run Code Online (Sandbox Code Playgroud)

此解决方案的问题是属性"{http://xml.apache.org/xslt}indent-amount".我没有找到任何关于它的文档,它似乎不保证是可移植的.

那么,如果我想用标准的Java 6类做什么,我还有什么其他选择?创建一个JAXB或DOM对象图只是为了漂亮的打印?

java xml

32
推荐指数
2
解决办法
4万
查看次数

结合选项的最优雅方式是什么?

这是我到目前为止所得到的:

Optional<Foo> firstChoice = firstChoice();
Optional<Foo> secondChoice = secondChoice();
return Optional.ofNullable(firstChoice.orElse(secondChoice.orElse(null)));
Run Code Online (Sandbox Code Playgroud)

这让我觉得既丑陋又浪费.如果firstChoice存在,我不必要地计算secondChoice.

还有一个更高效的版本:

Optional<Foo> firstChoice = firstChoice();
if(firstChoice.isPresent()) {
 return firstChoice;
} else {
 return secondChoice();
}
Run Code Online (Sandbox Code Playgroud)

在这里,我无法将一些映射函数链接到最终,而无需复制映射器或声明另一个局部变量.所有这些使得代码比实际解决的问题更复杂.

我宁愿写这个:

return firstChoice().alternatively(secondChoice());
Run Code Online (Sandbox Code Playgroud)

但是Optional ::或者显然不存在.怎么办?

java optional java-8

32
推荐指数
4
解决办法
2万
查看次数

JUnit + Maven:访问$ {project.build.directory}值

在我的单元测试中,我想在$ {project.build.directory}中创建一个tmp目录.如何在单元测试中访问$ {project.build.directory}的值?

我能想到的一种方法是在测试资源中提供过滤的属性文件,该文件保留该值.(我还没有尝试,但我认为这应该有效.)

是否有直接访问/传递此属性值的方法?

此致,弗洛里安

java junit maven

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

JAX-RS客户端:ResponseProcessingException处理

一些重载的调用请求方法,例如:get()post(Entity<?> entity)(还有其他)SyncInvoker返回一个Response对象,而不是解组的内容.

我注意到,在get()没有文档的情况下ResponseProcessingException,而其他方法,如所有3个重载 post方法,可能会抛出一个ResponseProcessingException.

我知道这ResponseProcessingExceptionRuntimeException继承自的ProcessingException,但我仍然会解释这意味着该get()方法不会抛出ResponseProcessingException.

它是否正确?怎么样ClientResponseFilter?为什么比其他的呼叫请求方法(行为不同的行为put,post......)?

另外,Javadoc用于抛出的方法ResponseProcessingException说:

在接收到的HTTP响应的处理失败的情况下(例如,在过滤器中或在将响应实体数据转换为特定Java类型的实例期间).

那个部分:

或者在将响应实体数据转换为特定Java类型的实例期间

在这里似乎是错误的,因为该readEntity方法不应该被调用:

https://jersey.java.net/documentation/latest/filters-and-interceptors.html#d0e9915

这是复制和粘贴文档错误吗?

不过,我猜过滤器是一个有效的案例.

java jax-rs jersey java-ee java-ee-7

21
推荐指数
1
解决办法
2382
查看次数

JAXB绑定文件:XmlAdapters和包名

我有这样的绑定文件

<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <jxb:bindings schemaLocation="example.xsd" node="/xs:schema">
    <jxb:schemaBindings>
        <jxb:package name="example" />
    </jxb:schemaBindings>
    <jxb:globalBindings>
        <jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
            parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
            printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
        <jxb:javaType name="java.util.Calendar" xmlType="xs:date"
            parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
            printMethod="javax.xml.bind.DatatypeConverter.printDate" />
        <jxb:javaType name="java.util.Calendar" xmlType="xs:time"
            parseMethod="javax.xml.bind.DatatypeConverter.parseTime"
            printMethod="javax.xml.bind.DatatypeConverter.printTime" />
    </jxb:globalBindings>

  </jxb:bindings>
</jxb:bindings>
Run Code Online (Sandbox Code Playgroud)

模式类在"example"(正确)中生成,但是"org.w3._2001.xmlschema"中的XmlAdapters(错误).我怎样才能解决这个问题?

java jaxb xjc

15
推荐指数
4
解决办法
2万
查看次数

将参数传递给Maven发布版本

我正在尝试使用Maven发布一个库并执行一个站点部署到sourceforge(我先创建了一个交互式shell).该版本由Jenkins工作完成(使用Jenkins的Maven Release Plugin).

我试过了:

-X -e -Dresume=false -Dusername=puce release:prepare release:perform -Darguments="-Dusername=puce"
Run Code Online (Sandbox Code Playgroud)

-X -e -Dresume=false -Dusername=puce -Darguments=-Dusername=puce release:prepare release:perform
Run Code Online (Sandbox Code Playgroud)

但两次工作都挂在现场:部署第一个模块:

 [INFO] --- maven-site-plugin:3.2:deploy (default-deploy) @ myproject-parent ---
 [INFO] Parent project loaded from repository: myGroupId:myOtherproject-parent:pom:1.0
 [INFO] Parent project loaded from repository: myGroupId:myOtherproject-parent:pom:1.0
 Using private key: /opt/jenkins/.ssh/id_dsa
Run Code Online (Sandbox Code Playgroud)

当我停止工作时,最后会打印以下内容:

Password for ${username}@shell.sourceforge.net: channel stopped
Run Code Online (Sandbox Code Playgroud)

这可能意味着$ {username}未得到解决.

如何解析$ {username}?

编辑:

请注意,以下运行正常:

site-deploy -Psonatype-oss-release -Dusername=puce
Run Code Online (Sandbox Code Playgroud)

编辑2: 作为发布的一部分:执行maven执行以下命令:

/usr/share/maven/bin/mvn -s /tmp/release-settings7797889802430474959.xml deploy site-deploy --no-plugin-updates --batch-mode -Psonatype-oss-release -P nexus -f pom.xml
Run Code Online (Sandbox Code Playgroud)

-Dusername=puce 似乎没有传递给这个maven命令......

另请注意help:effective-pom显示以下maven-release-plugin配置:

<plugin>
  <artifactId>maven-release-plugin</artifactId>
  <version>2.2.2</version> …
Run Code Online (Sandbox Code Playgroud)

java maven maven-release-plugin jenkins

12
推荐指数
2
解决办法
3万
查看次数

Maven + Surefire:代理配置

我正在使用httpunit来访问服务器.

我需要为此配置代理设置(http和https).

我在settings.xml文件中设置了配置,但是确定似乎忽略了它!?

我想避免尽可能复制配置.

在surefire插件配置中我试过:

<systemPropertyVariables>
    <http.proxyHost>${http.proxyHost}</http.proxyHost>
</systemPropertyVariables>
Run Code Online (Sandbox Code Playgroud)

<argLine>-Dhttp.proxyHost=${http.proxyHost}</argLine>
Run Code Online (Sandbox Code Playgroud)

<argLine>-Dhttp.proxyHost=${settings.proxies[protocol=http].host}</argLine>
Run Code Online (Sandbox Code Playgroud)

和其他几个组合.

我在单元测试中打印系统属性:

for (String propertyName : new TreeSet<String>(System.getProperties().stringPropertyNames())){
        System.out.println(propertyName + ": " + System.getProperty(propertyName));
    }
Run Code Online (Sandbox Code Playgroud)

到目前为止唯一有效的是显式值,例如:

<systemPropertyVariables>
    <http.proxyHost>myProxy</http.proxyHost>
</systemPropertyVariables>
Run Code Online (Sandbox Code Playgroud)

要么

<argLine>-Dhttp.proxyHost=myProxy</argLine>
Run Code Online (Sandbox Code Playgroud)

但正如我所说,如果可能的话,我不想复制配置.

如何在单元测试中使用settings.xml文件中设置的代理设置?

java proxy maven http-unit maven-surefire-plugin

10
推荐指数
1
解决办法
2835
查看次数

JAXB:如何生成英文Javadoc

当我使用maven-jaxb2-plugin生成JAXB类时,我得到了部分(!?)德语Javadoc的类.(我的默认语言环境:de_CH)

我想要的是:英语Javadoc

我试图设置maven opts:-Duser.language=en -Duser.country=US 但它没有效果.

如何使用英文Javadoc生成JAXB类?

以下是部分JAXB类的Javadoc和部分德语Javadoc:http://drombler.sourceforge.net/DromblerACP/docs/site/0.2.1-SNAPSHOT/apidocs/org/drombler/acp/core/action/jaxb/package -frame.html

以下是相应的XSD:http://sourceforge.net/p/drombler/drombler-acp/ci/default/tree/drombler-acp-core-action/src/main/resources/actions.xsd

这是相应的POM:http://sourceforge.net/p/drombler/drombler-acp/ci/default/tree/drombler-acp-core-action/pom.xml

相关的JAXB问题:

https://java.net/jira/browse/JAXB-1001

任何解决方法?

java jaxb xjc maven-jaxb2-plugin

10
推荐指数
2
解决办法
4619
查看次数

已弃用的认可标准的替代方案覆盖机制和扩展机制

Java 8 Update 40(8u40)发行说明指出:

已弃用的标准覆盖机制和扩展机制已被弃用,可能会在将来的版本中删除.没有运行时更改.建议使用"认可标准覆盖"或"扩展"机制的现有应用程序远离使用这些机制.

还有一个问题澄清了Jigsaw(计划用于Java SE 9,AFAIK),这将以某种方式用模块化方法取代:

http://bugs.java.com/view_bug.do?bug_id=8065675

我知道Oracle现在想要弃用这些机制,因为它们不再支持它们在Java SE 9中了.

另一方面,在不提供替代方案的情况下弃用某些东西并不是一种好的做法.

发布说明指出:"建议现有应用程序迁移远离使用这些机制"

那么你怎么能"远离"

  • 认可标准覆盖机制
  • 扩展机制

在Java SE 8中?

java java-8 java-9

10
推荐指数
1
解决办法
5235
查看次数

Spring:单元和集成测试

我正在寻找使用Spring设置单元和集成测试的最佳实践.

我通常使用3种测试:

  • "真正的"单元测试(没有依赖)
  • 测试作为"单元"测试(内存数据库,本地调用,模拟对象,......)或集成测试(持久数据库,远程调用,...)运行
  • 测试仅作为集成测试运行

目前我只有第二类测试,这是棘手的部分.我设置了一个基础测试类,如:

@ContextConfiguration(locations = { "/my_spring_test.xml" })
public abstract class AbstractMyTestCase extends AbstractJUnit4SpringContextTests
Run Code Online (Sandbox Code Playgroud)

而"单位"测试如下:

public class FooTest extends AbstractMyTestCase
Run Code Online (Sandbox Code Playgroud)

使用自动装配的属性.

在不同(集成测试)环境中运行测试的最佳方法是什么?对测试进行子类化并覆盖ContextConfiguration?

@ContextConfiguration(locations = { "/my_spring_integration_test.xml" })
public class FooIntegrationTest extends FooTest
Run Code Online (Sandbox Code Playgroud)

这会有用吗(我目前无法在这里轻松测试)?这种方法的问题是"@ContextConfiguration(locations = {"/ my_spring_integration_test.xml"})"重复了很多.

有什么建议?

此致,弗洛里安

java spring integration-testing maven-2 unit-testing

8
推荐指数
1
解决办法
7937
查看次数