首先,我想解释导致问题的情况/要求:
在我们的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图像?
提前致谢,
托马斯
我们目前正在将一些项目从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?
更新
这是我到目前为止所得到的:
首先,我发现了这个投影,它使用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.
以下是启动过程的概述:
postConstruct()
将调用MBean的注入目标的方法,因此MBean在MBean服务器中注册此方法的一个缺点是在执行MBean方法时缺少事务上下文(任何EJB调用都将在事务上下文中运行).但是,如果需要,可以使用CDI拦截器修复这个问题,该拦截器将提供事务上下文.Seam项目似乎有适当的拦截器.
我仍然不确定这是否是一种理智和稳定的方法,因此任何建设性的评论,提示等都非常受欢迎.
我想发送带有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) 我们目前正在评估 Keycloak 作为我们的 SSO 解决方案,虽然它适用于我们基于 servlet 的应用程序,但有一个关于我们的(基于 React 的)SPA 的问题。
我们的设计师想要什么:举个例子,假设我们有一个电子邮件客户端 spa。用户正在编写电子邮件,但随后会分心。当他返回时,SSO 会话已经超时,需要重新登录。用户现在应该看到一个登录表单,登录后应该可以发送仍在 SPA 本地存储中的电子邮件(即重新登录而不重新启动 SPA 或丢失数据)。
AFAIK Keycloak 不提供身份验证 API(出于充分的理由),而是使用重定向到登录页面并返回到应用程序(据我了解,对于移动应用程序,将使用系统浏览器)。如果我没记错的话,重定向将意味着 SPA 被重新初始化,因此数据将丢失。
那么问题来了:我们的设计师想要用 Keycloak 做什么?
如果是,将如何进行?直接发布到 Keycloak 使用的登录 url 似乎是一个坏主意,因为令牌可能无法正确存储,并且可能存在同源策略问题。在 iframe 或弹出窗口中执行此操作吗?
我有这个需要解析的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.
多谢你们
我们对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) 我需要使用注释+正则表达式验证电子邮件.我试着使用以下内容:
@NotNull
@Pattern(regexp=".+@.+\\.[a-z]+")
private String email;
Run Code Online (Sandbox Code Playgroud)
但是,当我在电子邮件字段中有不正确的电子邮件地址时,我不知道如何打印错误消息.有任何想法吗?
我试图获得返回的行数而不是表中的所有结果.
我看到这可以这样做:
( (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
不是直接从查询中获取所有返回的行数?
我们目前有一个项目设置,使用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文件的文件日期来识别较新版本. …
我想在 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 测试。非常感谢您的帮助。