问题有点理论化,创建JAXB上下文,marshaller和unmarshaller的成本是多少?
我发现我的代码可以从保持相同的JAXB上下文和可能与所有编组操作相同的编组器中受益,而不是在每个编组时创建上下文和编组器.
那么创建JAXB上下文和marshaller/unmarshaller的成本是多少?是否可以为每个编组操作创建context + marshaller,或者最好避免它?
我有一个在我的开发MacBook Pro上运行良好的测试,但无法在持续集成的TeamCity服务器中运行.
错误如下:
java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
Run Code Online (Sandbox Code Playgroud)
开发盒和TeamCity都使用Java 1.6,我使用BouncyCastle库来满足特殊的AES加密需求.
代码如下:
private byte[] aesEncryptedInfo(String info) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidParameterSpecException, InvalidAlgorithmParameterException, NoSuchProviderException {
Security.addProvider(new BouncyCastleProvider());
SecretKey secret = new SecretKeySpec(CUSTOMLONGSECRETKEY.substring(0, 32).getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(VECTOR_SECRET_KEY.getBytes()));
return cipher.doFinal(info.getBytes("UTF-8"));
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
看起来根据所选答案,我必须在我的TeamCity安装上修改一些东西,它可能会影响一些用户安装 - 所以它不是一个好选择我必须切换到另一个加密库来做到这一点没有限制.所以充满弹性的城堡可能会有所帮助.
更新2
我实际上切换到使用BouncyCastle来避免这种限制.请注意,这仅适用于直接使用自己的BC类,而不是BC提供程序.
为了测试与时间相关的代码,最好使用虚拟时钟模式
我们的想法是,我们不使用当前时间new Date,而是从可以用虚拟时钟模拟的时钟返回预定义的固定时间.
现在在Java中我们有JodaTime和DateTimeclass,它允许设置采样时间
DateTimeUtils.setCurrentMillisFixed(today.getMillis());
Run Code Online (Sandbox Code Playgroud)
并将固定时间重置为系统时间:
DateTimeUtils.setCurrentMillisSystem();
Run Code Online (Sandbox Code Playgroud)
现在的问题!
如果它在运行测试时全局设置全局上下文中的固定时间,那么将此技术用于setUp和tearDown方法是多么安全.只要我得到它 - 它只会工作,只要我们没有两个并发测试,这种技术在同一环境中并行运行.
注意:我们重用单一连接.
************************************************
public Connection connection() {
try {
if ((connection == null) || (connection.isClosed()))
{
if (connection!=null)
log.severe("Connection was closed !");
connection = DriverManager.getConnection(jdbcURL, username, password);
}
} catch (SQLException e) {
log.severe("can't connect: " + e.getMessage());
}
return connection;
}
**************************************************
public IngisObject[] select(String query, String idColumnName, String[] columns) {
Connection con = connection();
Vector<IngisObject> objects = new Vector<IngisObject>();
try {
Statement stmt = con.createStatement();
String sql = query;
ResultSet rs =stmt.executeQuery(sql);//oracle increases cursors count here
while(rs.next()) {
IngisObject …Run Code Online (Sandbox Code Playgroud) 对于那些经常使用Web服务的人来说,他们不时会得到更新,这并不奇怪.而且您始终需要跟踪这些更新的更改.
在我的特定情况下,我处理由WSDL定义的Web服务,并且我获得了基于此WSDL生成的类.
但是在从更新的WSDL重新生成类之前,我希望看到WSDL中的更改并确定更改量 - 看看我应该做些什么准备.
不幸的是,如果我只比较新旧版本的.wsdl文件,由于一个原因并不总是很好 - wsdl内容可以重新排序(内部重构).这就是找到更多语义工具的原因.
我已经尝试过Oxygen XML Diff工具,但它对我来说效果也不好.
我正在寻找一个工具,它将采用两个XML并且只带来语义差异,例如:
为了这个工作,我猜这个工具必须加载并深入分析结构,Oxygen XML Diff声称做得很好,但它只是一个改进版本的文本文件比较.
您能否为此推荐一项工作,特别是要查看基于WSDL的Web服务更新.
更新1:新想法是比较生成的源而不是WSDL.
谢谢.
我正在寻找一种在Mac OS X 10.7 Lion或更高版本上安装mod_jk的正确方法.目标是在Apache HTTPD后面测试Tomcat.
到目前为止,我发现安装mod_jk的唯一方法是下载源代码然后在控制台中配置它并进行make和make install.
这不是真的,因为我需要自己管理mod_jk安装和配置.例如,我可能忘记在需要时删除mod_jk.无论如何,我认为应该有更友好的方式安装mod_jk像某种DMG包.
我还发现mod_jk在OS X Server中可用.实际上它在我的开发机器上,但仅适用于服务器.
<IfDefine MACOSXSERVER>
...
#LoadModule jk_module libexec/apache2/mod_jk.so
...
</IfDefine MACOSXSERVER>
Run Code Online (Sandbox Code Playgroud)
对于没有安装OS X Server或任何其他方式的开发人员,可能会在某处提供mod_jk软件包.
更新
以下是我的配置的样子:
<VirtualHost *:80>
ServerAdmin me@me.com
DocumentRoot "/Users/me/Sites/projekt"
ServerName projekt.local
<Directory "/Users/me/Sites/projekt">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
ProxyPass /coolapp ajp://localhost:8009/coolapp
ProxyPassReverse /coolapp ajp://localhost:8009/coolapp
ErrorLog "/private/var/log/apache2/projekt.local-error_log"
CustomLog "/private/var/log/apache2/projekt.local-access_log" common
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
以上和配置Tomcat与AJP连接器只是你需要的.惊人!
参考: …
我发现Magento API中有两种不同的订单属性.
order_id和order_increment_id.对于样本订单,它们可以是order_increment_id = 100000080和order_id = 81.
问题是:它们之间有什么区别?他们被认为是如何使用的?在网上商店用户界面中,我看到我的订单有"订单号"= 100000080.什么是order_id属性?
我有两个未知类型的数组...有没有办法检查元素是否相同:
public static boolean equals(Object a , Object b) {
if (a instanceof int[])
return Arrays.equals((int[]) a, (int[])b);
if (a instanceof double[]){
////etc
}
Run Code Online (Sandbox Code Playgroud)
我想在没有所有实例检查的情况下这样做....
我想保护对公共接口中NSMutableArray的访问
我试图通过在公共接口中将属性定义为NSArray并在私有接口中将NSMutableArray定义为:
@interface Order : NSObject
@property (readonly, strong, nonatomic) NSArray* comments;
@end
@interface Order()
@property (readwrite, strong, nonatomic) NSMutableArray* comments;
@end
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 所以我必须在公共接口NSMutableArray中定义属性:
@interface Order
@property (strong, nonatomic) NSMutableArray* comments;
@end
Run Code Online (Sandbox Code Playgroud)
目标是为API客户端提供对注释的只读访问权限,以及addObject:对实现中的方法的完全访问权限.
所以定义目标更清晰:
所以简单的问题是,是否可以使属性的公共定义更通用(NSArray而不是NSMutableArray).
有没有其他干净的方法来达到目标或我必须在任何地方使用NSMutableArray?
解析度
在回顾了我原来的问题和答案之后,我意识到我想在公共接口中使用更多泛型类NSArray,在实现中使用NSMutableArray - 但这对于一个属性来说是不可能的.所以答案是不可能的.
因此,我将使用NSMutableArray的单一属性,而不需要任何额外的保护.
但是如果你真的更喜欢保护而不是简单和高效,我也会选择最合适的答案.
我必须为以下XML创建对象模型:
XML示例1:
<InvoiceAdd>
<TxnDate>2009-01-21</TxnDate>
<RefNumber>1</RefNumber>
<InvoiceLineAdd>
</InvoiceLineAdd>
</InvoiceAdd>
Run Code Online (Sandbox Code Playgroud)
XML示例2:
<SalesOrderAdd>
<TxnDate>2009-01-21</TxnDate>
<RefNumber>1</RefNumber>
<SalesOrderLineAdd>
</SalesOrderLineAdd>
</SalesOrderAdd>
Run Code Online (Sandbox Code Playgroud)
XML输出将基于单个字符串参数或枚举.String txnType ="Invoice"; (或"SalesOrder");
我会使用单个类TransactionAdd:
@XmlRootElement
public class TransactionAdd {
public String txnDate;
public String refNumber;
private String txnType;
...
public List<LineAdd> lines;
}
Run Code Online (Sandbox Code Playgroud)
而不是使用子类或其他任何东西.创建TransactionAdd实例的代码对于两种类型的事务都是相同的,它只在类型上有所不同.
这个XML由一个名为QuickBooks的知名产品使用,并由QuickBooks Web服务使用 - 因此我无法更改XML,但我希望能够轻松地根据属性(txnType)设置元素名称.
我会考虑像确定目标元素名称的方法:
@XmlRootElement
public class TransactionAdd {
public String txnDate;
public String refNumber;
private String txnType;
...
public List<LineAdd> lines;
public String getElementName() {
return txnType + "Add";
}
}
Run Code Online (Sandbox Code Playgroud)
将使用以下代码创建不同的事务:
t = new TransactionAdd();
t.txnDate = …Run Code Online (Sandbox Code Playgroud)