Java 如何从OSGI包调用方法?
我已经编写了这个OSGI包:Java 如何从OSGI包调用方法?,java,jsf,jsf-2,ejb-3.0,osgi,Java,Jsf,Jsf 2,Ejb 3.0,Osgi,我已经编写了这个OSGI包: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package CryptoLib; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class cryptoSha { p
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package CryptoLib;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class cryptoSha {
public cryptoSha() {
}
/** method for converting simple string into SHA-256 hash */
public String stringHash(String hash) throws NoSuchAlgorithmException{
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(hash.getBytes());
byte byteData[] = md.digest();
/** convert the byte to hex format */
StringBuilder sb = new StringBuilder();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
}
这是调用包的EAR包:
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.osgi.framework.BundleContext;
@Named("loginController")
@SessionScoped
public class userCheck extends HttpServlet implements Serializable {
public userCheck(){
}
@WebServlet(name = "CL_67", urlPatterns = {"/CL_67"})
public class cryptoSha extends HttpServlet {
@Inject
cryptoSha stringHash;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println(cryptoSha.stringHash("test"));
}
}
}
我成功地编译并部署到JBoss 7.1.0上,但当我启动EAR包时,什么都没有发生。你能帮我找出我在代码中的错误吗
亲切问候,,
彼得
编辑:
不幸的是,我是java编程新手,示例中的一些代码我不了解它们是如何工作的。你能帮我举个例子吗。我需要看看这个代码必须如何以正确的方式编写,以便在将来使用它?有人会修复代码吗
先谢谢你。
彼得有几点:
ServiceReference serviceRef =
bundleContext.getServiceReference("myService");
然后对该serviceRef
调用doGet
仅依赖于标准Java对象创建:
try {
cryptoSha dc = new cryptoSha();
String nhash = dc.stringHash("test");
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
因此,除非cryptoSha
是您的ear的一部分或应用程序类路径中的其他部分,否则我怀疑您在这里遇到了NoClassDefFoundError
但是,即使您创建了cryptoSha
,您也只是试图为字符串nhash
分配一个值,但是您没有对它做任何操作,因此您的servlet实际上什么也没有做有一个knopflerfish教程可能会有所帮助:您甚至没有指出以具体类的名义将具体类注册为服务是毫无意义的!如果客户机可以看到该类,为什么他们不直接实例化它,而不是通过OSGi服务呢?
try {
cryptoSha dc = new cryptoSha();
String nhash = dc.stringHash("test");
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}