我有一些EJB作为JAX-WS Web服务:
@WebService
@Stateless
@Remote(MobileFacade.class)
public class MobileFacadeBean implements MobileFacade {
...
@Resource
WebServiceContext wsc;
...
}
Run Code Online (Sandbox Code Playgroud)
在此Web Service类中,通过@Resource注入WebServiceContext.我使用此WebServiceContext来获取实现中的主体.这很有效,但现在我想知道如何(单元)测试这个课程!
到目前为止,我正在使用OpenEJB来测试我的EJB.由于Web Service类也是无状态会话Bean,我真的想在这里使用相同的方法.但是,它并不那么容易 - 当然,它抱怨在没有被称为Web服务时没有WebServiceContext.
所以第一个问题是:有没有办法在OpenEJB中模拟WebServiceContext?
如果不是,您会采用什么方法来测试这种Web服务类?
干杯,弗兰克
我有这样的代码:
private WSSecurityEngine engine = new WSSecurityEngine();
private CallbackHandler callbackHandler = new UsernamePasswordCallbackHandler();
@Test
public void testWss4jEngine() {
InputStream in = getClass().getClassLoader().getResourceAsStream("soap/soapWithUsernameTokenRequest.xml");
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder;
Document doc = null;
try {
docBuilder = builderFactory.newDocumentBuilder();
doc = docBuilder.parse(in);
} catch (Exception e) {
LOG.error("Error parsing incoming request. Probably it is not a valid XML/SOAP message.", e);
return;
}
List<WSSecurityEngineResult> results = null;
try {
results = engine.processSecurityHeader(doc, null, callbackHandler, null);
} catch (WSSecurityException e) {
// TODO Auto-generated …Run Code Online (Sandbox Code Playgroud) 我正在将webapp从JSF 1.2升级到JSF 2.1(使用Apache MyFaces实现).该应用程序也使用Seam并防止XSRF攻击,我正在使用该<s:token>标签.
现在我想知道<s:token>JSF 2.1是否仍然需要它.
有人可以提供一些相关信息吗?
干杯弗兰克
我的应用程序必须打开到服务器的tcp套接字连接并定期收听传入的消息.
在JEE 7应用程序中实现此目的的最佳实践是什么?
现在我有这样的事情:
@javax.ejb.Singleton
public class MessageChecker {
@Asynchronous
public void startChecking() {
// set up things
Socket client = new Socket(...);
[...]
// start a loop to retrieve the incoming messages
while((line = reader.readLine())!=null){
LOG.debug("Message from socket server: " + line);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用@PostConstruct方法从@Startup bean调用MessageChecker.startChecking()函数.
@javax.ejb.Singleton
@Startup
public class Starter() {
@Inject
private MessageChecker checker;
@PostConstruct
public void startup() {
checker.startChecking();
}
}
Run Code Online (Sandbox Code Playgroud)
你认为这是正确的方法吗?实际上它运作不佳.应用程序服务器(JBoss 8 Wildfly)挂起,不再对关闭或重新部署命令作出反应.我感觉它被困在while(...)循环中.
干杯弗兰克