小编UpA*_*ght的帖子

单元测试通过Maven,但未通过Cobertura:"期望分支目标65处的堆栈图帧"

我最近在我的Java/Spring-MVC项目中添加了Cobertura插件.奇怪的是,我的所有单元测试都在通过,并且当Maven进行初始测试运行时它们仍然通过,但是当Cobertura尝试运行测试时,它们都会失败,并显示相同的错误消息:

Expecting a stackmap frame at branch target 65 in method xxx.xxxx.xxxx.xxxx;)V at offset 40
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况,甚至不知道如何解决这个问题.我搜索过互联网,但没有发现任何类似的问题.我使用JUnit和spring-test-mvc进行测试.

谁看过这个吗?

java cobertura spring-mvc maven spring-mvc-test

19
推荐指数
2
解决办法
5210
查看次数

使用Spring MVC,接受带有错误JSON的POST请求会导致返回默认的400错误代码服务器页面

我正在开发一个REST API.接收带有错误JSON的POST消息(例如{sdfasdfasdf})会导致Spring返回400 Bad Request Error的默认服务器页面.我不想返回页面,我想返回一个自定义的JSON Error对象.

当使用@ExceptionHandler抛出异常时,我可以这样做.因此,如果它是一个空白请求或一个空白JSON对象(例如{}),它将抛出一个NullPointerException,我可以用我的ExceptionHandler捕获它并做任何我喜欢的事情.

那么问题是,当Spring只是无效的语法时,它实际上不会抛出异常......至少不是我能看到的.它只是从服务器返回默认错误页面,无论是Tomcat,Glassfish等.

所以我的问题是如何"拦截"Spring并使其使用我的异常处理程序或以其他方式阻止错误页面显示而是返回一个JSON错误对象?

这是我的代码:

@RequestMapping(value = "/trackingNumbers", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public ResponseEntity<String> setTrackingNumber(@RequestBody TrackingNumber trackingNumber) {

    HttpStatus status = null;
    ResponseStatus responseStatus = null;
    String result = null;
    ObjectMapper mapper = new ObjectMapper();

    trackingNumbersService.setTrackingNumber(trackingNumber);
    status = HttpStatus.CREATED;
    result = trackingNumber.getCompany();


    ResponseEntity<String> response = new ResponseEntity<String>(result, status);

    return response;    
}

@ExceptionHandler({NullPointerException.class, EOFException.class})
@ResponseBody
public ResponseEntity<String> resolveException()
{
    HttpStatus status = null;
    ResponseStatus responseStatus = null;
    String result = null;
    ObjectMapper mapper …
Run Code Online (Sandbox Code Playgroud)

java rest spring-mvc

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

FileReader没有使用AngularJS正确加载文件

我正在尝试将一个csv文件加载到AngularJS中,以便我可以对内容进行一些操作.它不像我想要的那样工作.为了测试它是否正确加载,我将它加载到textarea中以查看内容.

当我加载文件时,它说它已正确加载但是onload()事件似乎没有触发,直到我加载第二个CSV文件,在这种情况下FIRST文件显示在textarea中.

HTML:

<div>
  <input ng-model="csv"
            onchange="angular.element(this).scope().fileChanged()"
            type="file" accept=".csv" id="fileInput"/>
</div>
<br/>
<div>
  <textarea ng-model="csvFile" readonly="true" style="width:99%; height:500px" disabled></textarea>
</div>
Run Code Online (Sandbox Code Playgroud)

JS:

$scope.fileChanged = function() {

  $scope.$apply(function() {
      var csvFileInput = document.getElementById('fileInput');
      var reader = new FileReader();
      var csvFile = csvFileInput.files[0];
      reader.onload = function(e) {
          $scope.csvFile = reader.result;
      };
      reader.readAsText(csvFile);
  });
};
Run Code Online (Sandbox Code Playgroud)

当我把它放到JSFiddle中时,文件根本不会出现在textarea中.我是JSFiddle的新手,所以我不知道为什么会这样.

任何帮助都将不胜感激.

html javascript filereader angularjs

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

如果上次修改日期已经过了某个时间,我如何告诉 Camel 仅复制文件?

我想知道这是否可以用 Apache Camel 来实现。我想做的是让 Camel 查看文件目录,并只复制“上次修改”日期比某个日期更新的文件。例如,仅复制 2014 年 2 月 7 日之后修改的文件。基本上,我想在每次 Camel 运行时更新“上次运行日期”的变量,然后检查文件在上次运行后是否被修改。

我想使用文件上的实际时间戳,而不是 Camel 提供的任何内容...据我所知,Camel 中有一个已弃用的方法,用于在 Camel 查看文件时标记文件,然后让您知道它们是否已经被处理。但这个功能已被弃用,所以我需要一个替代方案。

Apache 建议在处理后移动或删除文件,以了解它是否已被处理,但这对我来说不是一个选择。有任何想法吗?提前致谢。

已解决(2014-02-10):

import java.util.Date;

import org.apache.camel.builder.RouteBuilder;

public class TestRoute extends RouteBuilder {

    static final long A_DAY = 86400000;

    @Override
    public void configure() throws Exception {

        Date yesterday = new Date(System.currentTimeMillis() - A_DAY);

        from("file://C:\\TestOutputFolder?noop=true").
            filter(header("CamelFileLastModified").isGreaterThan(yesterday)).
            to("file://C:\\TestInputFolder");

    }

}
Run Code Online (Sandbox Code Playgroud)

无需 XML 配置。感谢下面的回答。

java apache-camel

5
推荐指数
1
解决办法
7050
查看次数

使用JAXB将同名的多个XML元素解组到列表中

我正在尝试将XML消息解组为Java对象.我有大部分工作,但有一个问题我坚持下去.我有一个如下所示的架构:

<DeliveryDetails>
  <Name>Ed</Name>
  <Location>Toronto</Location>
  <Event>
    <Date>2013-05-06</Date>
    <Time>12:12</Time>
    <Description>MARKHAM</Description>
  </Event>
  <Event>
    <Date>2013-05-07</Date>
    <Time>05:12</Time>
    <Description>MARKHAM</Description>
  </Event>
  <Event>
    <Date>2013-05-08</Date>
    <Time>15:12</Time>
    <Description>MARKHAM</Description>
  </Event>
</DeliveryDetails>
Run Code Online (Sandbox Code Playgroud)

现在,问题是JAXB ObjectFactory只保存最后一个事件.如果有一个元素包装events(),那么我将知道如何使用XML Element Wrapper处理它.但由于没有包装,我不知道该怎么办.有人有什么想法吗?

我猜测ObjectFactory正在获取所有事件,但不断用最新的事件覆盖旧事件.需要有一些方法来告诉它保存每个单独的事件,而不是每次只写同一个事件,但我不知道如何实现这一点.

java xml jaxb

4
推荐指数
1
解决办法
4316
查看次数

什么时候应该关闭在无状态会话bean中创建的JMS连接?

我有一个关于何时关闭在无状态会话bean(EJB)中创建的连接的一般问题。连接是到ActiveMQ的,它们是在Bean的构造函数中创建的。然后在一个方法中使用该连接,我想知道何时关闭该连接的适当时间/地点。

有一个单独的方法来关闭连接是否合适,类必须使用Bean来调用该方法?还是应该简单地使用该方法在方法内关闭连接?我担心我可能会关闭一个连接,然后再将其与现在关闭的连接一起使用,因为该连接是在构造函数中打开的。这是一些需要注意的代码:

@Stateless
@LocalBean
public class SendEventsBean {


private static String brokerURL = ".......";
private static transient ConnectionFactory factory;
private transient Connection connection;
private transient Session session;
private transient MessageProducer producer;

public SendEventsBean() {
    factory = new ActiveMQConnectionFactory(brokerURL);
    try {
        connection = factory.createConnection();
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        producer = session.createProducer(null);
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

public void sendEvent(String id, String description, String area) {

    Destination destination;
    try {
        destination = session.createQueue("FWT." + "events");
        TextMessage message = …
Run Code Online (Sandbox Code Playgroud)

java activemq-classic ejb

4
推荐指数
1
解决办法
7859
查看次数