小编ET1*_*T13的帖子

如何判断一个局部变量是否来自Java字节码的"最终"?(与BCEL相关)

信息,例如局部变量是否"最终"存储在Java字节码中?我知道对于字段(全局变量)和方法,这些在访问标志位中找到,但似乎无法在局部变量表中找到等效项.

我对这个问题很感兴趣,因为我正在使用BCEL来检查局部变量是否是最终的,并且已经找到了AccessFlags类中的字段,方法和类的等价物.

提前致谢.

java bytecode bcel

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

编写检测器以使用Findbugs搜索"System.out.println"的用法

我正在尝试使用Findbugs编写一个错误检测器来查找方法调用"System.out.println"的实例.

据我所知,字节码中的"System.out.println"被编译为对GETSTATIC的调用,后者将"System.out"推送到堆栈上.对INVOKEVIRTUAL的调用会从堆栈中弹出"System.out"并调用该方法.

我准备了一些代码(如下所示),它找到了正确的GETSTATIC和INVOKEVIRTUAL调用,但是无法将两者连接在一起.我怀疑我可能需要以某种方式使用OpcodeStack,但我很难理解如何使用它.任何帮助,将不胜感激.

    @Override 
    public void sawOpcode(int seen) { 
            // if opcode is getstatic 
            if (seen == GETSTATIC) { 
                    String clsName = getClassConstantOperand(); 
                    if ("java/lang/System".equals(clsName)) { 
                            String fldName = getNameConstantOperand(); 
                            if ("out".equals(fldName)) { 
                                    System.out.println("SYSTEM.OUT here"); 
                            } 
                    } 
            } 

            // if opcode is invokevirtual 
            if (seen == INVOKEVIRTUAL) { 
                    String cls = getDottedClassConstantOperand(); 
                    if ("java.io.PrintStream".equals(cls)) { 
                            String methodName = getNameConstantOperand(); 
                            if ("println".equals(methodName)) { 
                                    bugReporter.reportBug(new BugInstance("SYSTEM_OUT_PRINTLN", 
                                                    NORMAL_PRIORITY).addClassAndMethod(this) 
                                                    .addSourceLine(this)); 
                            } 
                    } 
            } 

    }
Run Code Online (Sandbox Code Playgroud)

java bytecode findbugs

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

为不同的主机使用不同的文件

我正在使用 Ansible(带有 Ansible Tower)并想要创建一个运行测试的任务。

我有一个(SoapUI 测试)的属性文件,其形式为 key=value。该值将根据运行测试的主机而变化。

尽管有一种方法可以为每个主机指定不同的变量,但似乎没有一种方法可以为不同的主机指定不同的文件。

(据我所知)最好的方法似乎是创建一个模板(http://docs.ansible.com/ansible/template_module.html)而不是属性文件,并使用主机变量填充模板值。有替代或更好的方法吗?

ansible

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

Maven 执行器附加在儿童中

我正在使用 maven 执行器插件。鉴于我有一个 parent 和 child pom.xml,我希望exclusionsinclusions标签中的元素被附加而不是被覆盖。我试过combine.children="append"为此使用它并且它有效,但我最终得到了一个额外的configuration标签。我是否使用combine.children不正确和/或如何避免额外的configuration标签?请参阅下面的示例:

在父pom.xml

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4.1</version>
        <executions>
          <execution>
            <id>enforce-banned-dependencies</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>org.apache.maven</exclude>
                    <exclude>org.apache.maven:badArtifact</exclude>
                    <exclude>*:badArtifact</exclude>
                  </excludes>
                  <includes>
                    <!--only 1.0 of badArtifact is allowed-->
                    <include>org.apache.maven:badArtifact:1.0</include>
                  </includes>
                </bannedDependencies>
              </rules>
              <fail>true</fail>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
Run Code Online (Sandbox Code Playgroud)

在孩子pom.xml

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <configuration>
          <rules>
            <bannedDependencies>
              <includes combine.children="append"> …
Run Code Online (Sandbox Code Playgroud)

maven-3 maven maven-enforcer-plugin

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

Java线程池同步

我想执行以下算法 - 这必须在Java中完成

for(int i = 0; i< 100; i++){
    create 8 threads which perform a task
    wait for all threads to finish
}
Run Code Online (Sandbox Code Playgroud)

由于开销(以及每个线程将具有<20毫秒的工作时间的事实),期望线程不被连续地创建和销毁,这带来了线程池1的想法.我也知道使用Executable 2,可以调用shutdown,然后是awaitTermination.然而,在这种情况下由于环路是不可取的.那么如何进行线程同步呢?

我想在线程池中同步线程,就像使用传统线程的join()方法一样.

java multithreading threadpool thread-synchronization

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

在运行时更改CommonsMultipartResolver的maxUploadSize

我使用CommonsMultipartResolver进行文件上传.

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
    <!-- specify maximum file size in bytes -->
<property name="maxUploadSize" value="100000"/>
</bean
Run Code Online (Sandbox Code Playgroud)

我希望能够在运行时更改其属性maxUploadSize(以便管理员可以更改大小).请问最好的方法是什么?

java spring file-upload spring-mvc apache-commons-fileupload

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

使用Request Dispatcher的Java过滤器 - 使用JavaEE 6注释

我使用JaveEE 6 Annotation为"/ folder/*"创建了一个过滤器

@WebFilter("/folder/*")
Run Code Online (Sandbox Code Playgroud)

但是,当我去"/test.html"有一个电话

request.getRequestDispatcher("/folder/test.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)

在doGet中,页面未被过滤.在浏览器中手动转到"/folder/test.jsp"时,过滤器工作正常.如何在使用调度程序时使其工作?

我找到了一个xml方法的解决方案,可以在这里这里创建多个地方的过滤器,但是无法使用注释找到解决方案.谢谢!

java dispatcher java-ee-6 servlet-filters

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