小编Tho*_*mas的帖子

用于检测CMYK图像的JAI ImageIO的纯Java替代品

首先,我想解释导致问题的情况/要求:

在我们的Web应用程序中,我们无法支持CMYK图像(JPEG),因为IE 8及以下版本无法显示它们.因此,我们需要检测何时有人想要上传这样的图像并拒绝它.

不幸的是,Java的ImageIO不会读取这些图像,也不会使我无法获得检测到的色彩空间.从调试开始,JPEGImageReader内部似乎得到了颜色空间代码11(这意味着JCS_YCCK),但我无法安全地访问该信息.

当查询读者的图像类型时,我没有得到任何CMYK,所以我可能会假设no image types = unsupported image.

我使用成像工具将源CMYK图像转换为RGB,以便测试它是否可读(我在尝试获取"无CMYK支持"消息时尝试模拟管理员的步骤).但是,JPEGImageReader不会读取该图像,因为它假定(在源中注释!)3分量RGB颜色空间,但图像标题报告4个组件(可能是RGBA或ARGB),因此IllegalArgumentException抛出了一个.

因此,ImageIO不是一个选项,因为我无法可靠地获取图像的色彩空间,我无法告诉管理员为什么不能接受由于某些内部的精细图像(它可以由浏览器显示)错误.

这让我尝试了JAI ImageIO,它CLibJPEGImageReader做得非常出色并正确读取了我所有的测试图像.

但是,由于我们将应用程序部署在可能托管其他应用程序的JBoss中,因此我们希望尽可能保持它们的隔离.据我所知,我需要JAI ImageIO的安装到JRE或以其他方式使本机库提供,以使用它们,因此,其他应用程序可能访问到它们为好,这可能会导致副作用(至少我们不得不测试很多,以确保不是这种情况).

这就是问题的解释,这里再次出现: JAI ImageIO是否有任何纯Java替代品可以可靠地检测并可能转换CMYK图像?

提前致谢,

托马斯

java cmyk jai javax.imageio

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

从JBoss 4.x到JBoss 7的端口MBean

我们目前正在将一些项目从JBoss 4.x移植到JBoss 7.到目前为止,除了我们通常用于提供简单管理操作的MBean之外,一切似乎都运行正常.

我一直在寻找相当长的一段时间,但要么我无法提出正确的搜索术语,要么我缺少一些知识来弥补JBoss 4.x和JBoss 7中的MBean定义之间的差距.

因此,希望有人可以提供我可能缺少的内容或我必须阅读的内容(可能是一些文档,示例等)的提示

在Jboss 4.x中,我们的MBean通常如下所示:

@Service( objectName = "Domain:Name=SomeMBean",
  xmbean="resource:<path-to-xmbean.xml>")
class SomeMBean 
{
  @EJB
  private SomeService someService;    

  public String someOperation()
  {
     someService.doSomething();
     return "success";
  }
}
Run Code Online (Sandbox Code Playgroud)

我们使用@Service注释来定义对象名称和xmbean描述符,JBoss会自动注册那些mbeans.

显然,在JBoss 7中,@Service注释不再存在,因此需要另一种方法.

到目前为止,我设法用平台mbean服务器手动注册MBean,但我更喜欢JBoss自动执行此操作.另外,到目前为止,我还没有设法提供方法/参数的描述(尽管这些功能更加出色).

为了清楚起见,我会重复这个问题:

如何在JBoss 7(Java EE 6)中定义提供以下功能的MBean?

  • 自动部署
  • 访问EJB
  • 可以通过JConsole或JMX-Console访问(我目前正在使用Dimitris Andreadis的端口)
  • 提供方法/参数的描述

更新

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

首先,我发现了这个投影,它使用CDI来包装相应注释的任何bean的注入目标,并在postConstruct()方法中进行JMX注册:http://code.google.com/p/jmx-annotations/.此外,扫描找到的MBean以获取类/属性/方法/参数注释,这些注释提供注释属性的描述.

但是,postConstruct()似乎没有为EJB调用该方法(我假设这是为了不与EJB容器冲突).因此MBean现在不应该是EJB而是普通的CDI bean.

因此,具有MBean不会自动实例化的缺点.为了解决这个问题,有一个单例bean在启动时循环遍历所有bean,BeanManager并创建每个找到的MBean的实例.由于MBean仍然具有其注入目标,postConstruct()因此不会调用其方法,并且将在MBean服务器中注册该bean.

以下是启动过程的概述:

  • 自定义CDI扩展扫描每个CDI bean以获取自定义@MBean批注
  • 对于每个可以忽略的MBean,注入目标被包裹
  • 将启动一个单独的bean,它在@PostConstruct方法中将创建MBean的实例
  • postConstruct()将调用MBean的注入目标的方法,因此MBean在MBean服务器中注册

此方法的一个缺点是在执行MBean方法时缺少事务上下文(任何EJB调用都将在事务上下文中运行).但是,如果需要,可以使用CDI拦截器修复这个问题,该拦截器将提供事务上下文.Seam项目似乎有适当的拦截器.

我仍然不确定这是否是一种理智和稳定的方法,因此任何建设性的评论,提示等都非常受欢迎.

java jmx mbeans jboss7.x

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

如何发送zip文件而不在物理位置创建它?

我想发送带有zip文件附件的电子邮件..我能够使用ByteArrayOutputStream发送pdf文件而不将它们保存在物理位置.但是当我尝试压缩那些文件时,发送它不起作用.它给予例外非法附件.

下面是我编写的用于创建zip的代码.

private MimeBodyPart zipAttachment( List<ByteArrayOutputStream> attachmentList, List<String> reportFileNames )
{
    MimeBodyPart messageBodyPart = null;
    try
    {
        // File file = File.createTempFile( "Reports.zip",".tmp" );
        // FileOutputStream fout = new FileOutputStream(file);
        ByteArrayOutputStream bout = new ByteArrayOutputStream(attachmentList.size());
        ZipOutputStream zos = new ZipOutputStream( bout );
        ZipEntry entry;
        for( int i = 0; i < attachmentList.size(); i++ )
        {
            ByteArrayOutputStream attachmentFile = attachmentList.get( i );
            byte[] bytes = attachmentFile.toByteArray();
            entry = new ZipEntry( reportFileNames.get( i ) );
            entry.setSize( bytes.length );
            zos.putNextEntry( entry );
            zos.write( …
Run Code Online (Sandbox Code Playgroud)

java java-ee

9
推荐指数
1
解决办法
8410
查看次数

将 Keycloak 登录并入 SPA

我们目前正在评估 Keycloak 作为我们的 SSO 解决方案,虽然它适用于我们基于 servlet 的应用程序,但有一个关于我们的(基于 React 的)SPA 的问题。

我们的设计师想要什么:举个例子,假设我们有一个电子邮件客户端 spa。用户正在编写电子邮件,但随后会分心。当他返回时,SSO 会话已经超时,需要重新登录。用户现在应该看到一个登录表单,登录后应该可以发送仍在 SPA 本地存储中的电子邮件(即重新登录而不重新启动 SPA 或丢失数据)。

AFAIK Keycloak 不提供身份验证 API(出于充分的理由),而是使用重定向到登录页面并返回到应用程序(据我了解,对于移动应用程序,将使用系统浏览器)。如果我没记错的话,重定向将意味着 SPA 被重新初始化,因此数据将丢失。

那么问题来了:我们的设计师想要用 Keycloak 做什么?

如果是,将如何进行?直接发布到 Keycloak 使用的登录 url 似乎是一个坏主意,因为令牌可能无法正确存储,并且可能存在同源策略问题。在 iframe 或弹出窗口中执行此操作吗?

single-sign-on single-page-application reactjs keycloak

9
推荐指数
1
解决办法
4590
查看次数

Jsoup在一个类中得到href

我有这个需要解析的HTML代码 <a class="sushi-restaurant" href="/greatSushi">Best Sushi in town</a>

我知道有一个jsoup的例子,你可以获得页面中的所有链接,例如

Elements links = doc.select("a[href]");
for (Element link : links) {
print(" * a: <%s>  (%s)", link.attr("abs:href"),
trim(link.text(), 35));
}
Run Code Online (Sandbox Code Playgroud)

但我需要一段代码,可以返回给我特定类的href.

多谢你们

java class href jsoup

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

Hibernate OneToOne自动连接提取(解决n + 1问题)

我们对Hibernate 3.3有一个n + 1选择问题.

为简单起见,我将做一个简短的抽象例子.

假设我们有以下简单类:

class MainEntity {
  @Id
  public Long id; //we have a table generator create this id

  @OneToOne ( mappedBy ="main" )
  public SubEntity subEntity;
}

class SubEntity {
 @Id
 @Column( name = "mainId" ) //note that this is the same column as the join column below
 public Long mainId; //in order to have the exact same id as the corresponding MainEntity

 @OneToOne ( fetch = FetchType.LAZY )
 @JoinColumn ( name = "mainId", insertable = false, …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa

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

注释和正则表达式

我需要使用注释+正则表达式验证电子邮件.我试着使用以下内容:

@NotNull
@Pattern(regexp=".+@.+\\.[a-z]+")
private String email;
Run Code Online (Sandbox Code Playgroud)

但是,当我在电子邮件字段中有不正确的电子邮件地址时,我不知道如何打印错误消息.有任何想法吗?

java regex annotations

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

如何计算Hibernate查询语言中的行?

我试图获得返回的行数而不是表中的所有结果.

我看到这可以这样做:

( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
Run Code Online (Sandbox Code Playgroud)

但是当试图以整数格式存储此查询时(它表示无法转换Query to Integer)

我正在使用动态查询,其中的值将在此查询下方提及

theQuery = "select count(*) from THM as thm " + 
                "join thm.TMC as tmc " +
                "join tmc.TIMCC as timcc " +
                "where thm.Qid = :Qid and thm.Cv = :Cv and timcc.Did = :Did and timcc.Cv= :Cv";

Query query = session.createQuery(theQuery);
query.setInteger("Qid", Integer.parseInt(Qid));
query.setInteger("Did", Did);
query.setInteger("Cv",cV);
Run Code Online (Sandbox Code Playgroud)

现在,如何在变量中使用Hibernate查询而list.size不是直接从查询中获取所有返回的行数?

java database hibernate hql

7
推荐指数
3
解决办法
4万
查看次数

Apache Ivy和本地Maven repo - 如何处理使用Maven 3构建的快照

我们目前有一个项目设置,使用Ivy进行依赖关系管理,Ant作为常规构建工具(虽然这可能与此不相关).另外,我们有一堆用Maven构建的库,以及项目(我们有多个)依赖于它们.我们知道这种情况远非理想,我们正在评估改善这种情况的方法,但我们无法像我们希望的那样快速改变.因此,我们必须与目前的工作一起工作.

无论如何,问题在于:它与Maven 2和Ivy一起工作但我们最近开始切换到Maven 3有几个原因(一个是更好的冲突解决方案),这种组合打破了我们的构建.

首先,我将尝试描述我们的构建如何与Maven 2和Ivy一起使用.之后,我将添加切换到Maven 3时破坏的地方.

Ivy + Maven 2

在开发我们库的新版本时,我们使用的是SNAPSHOT版本,这些版本安装在本地Maven仓库(.m2)中.此外,我们将这些快照部署到Artifactory中,以便能够共享中间构建以实现某些并行开发.

然后,我们的项目声明对这些快照的依赖性.相应的ivysettings.xml如下所示:

<ivysettings>
  <settings defaultResolver="default" />
  <include url="${ivy.default.settings.dir}/ivysettings-local.xml" />
  <resolvers>
    <ibiblio name="public" root="path.to.our.artifactory" m2compatible="true" />

    <filesystem name="local-maven2" m2compatible="true" checkmodified="true" changingPattern=".*SNAPSHOT">      
      <ivy pattern="${user.home}/.m2/repository/[organisation]/[module]/[revision]/[module]-[revision].pom" />
      <artifact pattern="${user.home}/.m2/repository/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]" />
    </filesystem>
    <filesystem name="local" checkmodified="true" changingPattern=".*SNAPSHOT">
      <ivy pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}" />
      <artifact pattern="${ivy.local.default.root}/${ivy.local.default.artifact.pattern}" />
    </filesystem>
    <filesystem name="local2" checkmodified="true" changingPattern=".*SNAPSHOT">
      <ivy pattern="${user.home}/.ivy2/cache/[organisation]/[module]/ivy-[revision].xml" />
      <artifact pattern="${user.home}/.ivy2/cache/[organisation]/[module]/[artifact]-[revision].[ext]" />
    </filesystem>

    <chain name="default" checkmodified="true" changingPattern=".*SNAPSHOT">
      <resolver ref="local" />
      <resolver ref="local-maven2" />
      <resolver ref="public" />
    </chain>
  </resolvers>
  <include url="${ivy.default.settings.dir}/ivysettings-shared.xml" />
</ivysettings>
Run Code Online (Sandbox Code Playgroud)

由于这种设置,Ivy应该寻找更新版本的快照并正确解决.通过比较相应.pom文件的文件日期来识别较新版本. …

java ant ivy maven-3

7
推荐指数
1
解决办法
1548
查看次数

如何为 IOException 编写 junit 测试用例

我想在 JUNIT 测试中检查 IOException 类。这是我的代码:

public void loadProperties(String path) throws IOException {
  InputStream in = this.getClass().getResourceAsStream(path);
  Properties properties = new Properties();
  properties.load(in);
  this.foo = properties.getProperty("foo");
  this.foo1 = properties.getProperty("foo1");
}
Run Code Online (Sandbox Code Playgroud)

当我尝试给出错误的属性文件路径时,它给出了 NullPointerException。我想对其进行 IOException 和 Junit 测试。非常感谢您的帮助。

java junit ioexception

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