`
cooper
  • 浏览: 513 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

web service中的jndi问题

阅读更多
项目需要通过jndi获得远程ejb对象,在把相应的操作发布成web service供.net调用

直接通过JNDI访问没有问题,web service发布也没问题,可以查看wsdl,但是在web service服务端里使用JNDI获得远程EJB就报错了

难道在web service中不能使用jndi???

提供的service方法为:
public FindCdmaResponse findCdma(FindCdmaRequest request) {

FindCdmaResponse response = new FindCdmaResponse();

try {
OSSInterface oss = JNDIUtil.getOSSInterface();

List list = oss.findCdmaAccNbrByWHRX(request.getDistNbr(), request.getNxxNbr(), request.getLineNbr(), request.getCount(), request.getLocalNetId());

PhoneNumber[] numbers = new PhoneNumber[list.size()];
for (int i = 0; i < list.size(); i++) {
Map m = (Map) list.get(i);
numbers[i] = new PhoneNumber();
numbers[i].setAccNbr((String) m.get("AccNbr"));
numbers[i].setAreaId((String) m.get("AreaId"));
numbers[i].setAccNbrClassId((String) m.get("AccNbrClassId"));
numbers[i].setAccNbrClassName((String) m.get("AccNbrClassName"));
numbers[i].setAgentId((String) m.get("AgentId"));
numbers[i].setWorkAreaId((String) m.get("WorkAreaId"));
numbers[i].setWorkAreaName((String) m.get("WorkAreaName"));
numbers[i].setIsAdvance((String) m.get("IsAdvance"));
}

response.set_return(numbers);
} catch (RemoteException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
} catch (NoDataException e) {
e.printStackTrace();
} catch (InterfaceException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

return response;
}

public class JNDIUtil {

private static final String JNDI_NAME = "OSSInterface";
private static final String PROVIDER_URL = "t3://133.0.176.229:5001";
private static final String SECURITY_PRINCIPAL = "weblogic";
private static final String SECURITY_CREDENTIALS = "weblogic";

public static Context getInitialContext() throws Exception {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, PROVIDER_URL);
p.put(Context.SECURITY_PRINCIPAL, SECURITY_PRINCIPAL);
p.put(Context.SECURITY_CREDENTIALS, SECURITY_CREDENTIALS);

return new InitialContext(p);
}

public static OSSInterface getOSSInterface() throws Exception {

Context cxt = getInitialContext();
Object objRef = cxt.lookup(JNDI_NAME);
OSSInterfaceHome home = (OSSInterfaceHome) PortableRemoteObject.narrow(
objRef, OSSInterfaceHome.class);

return home.create();
}

}


直接通过JNDI访问
public class JNDITest {

/**
* @param args
*/
public static void main(String[] args) {

try {
OSSInterface oss = JNDIUtil.getOSSInterface();

List list = oss.findCdmaAccNbrByWHRX("027", "1330", "%29%",new Integer(10), new Integer(1001));

for (int i = 0; i < list.size(); i++) {
System.out.println(i + ":" + list.get(i));
}
} catch (RemoteException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
} catch (InterfaceException e) {
e.printStackTrace();
} catch (NoDataException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

}

}

通过客户端调用
public void testfindCdma() throws java.lang.Exception {

String url = "http://localhost:8080/axis2/services/QiangHaoService";
QiangHaoServiceStub stub = new QiangHaoServiceStub(url);
FindCdmaRequest request = (FindCdmaRequest) getTestObject(FindCdmaRequest.class);

request.setDistNbr("027");
request.setNxxNbr("1330");
request.setLineNbr("%29%");
request.setCount(10);
request.setLocalNetId(1001);
PhoneNumber[] numbers = stub.findCdma(request).get_return();
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i].getAccNbr() + "," + numbers[i].getWorkAreaId() + ","
+ numbers[i].getAccNbrClassId() + "," + numbers[i].getAccNbrClassName() + ","
+ numbers[i].getAgentId() + "," + numbers[i].getWorkAreaId() + ","
+ numbers[i].getWorkAreaName() + "," + numbers[i].getIsAdvance());
}
assertNotNull(stub.findCdma(request));

}

错误日志
org.apache.axis2.AxisFault: weblogic.utils.AssertionError: ***** ASSERTION FAILED *****[ Failed to generate class for com.cattsoft.ibss.hub.intf.OSSInterface_trgpb2_HomeImpl_815_WLStub ] - with nested exception:
[java.lang.reflect.InvocationTargetException - with target exception:
[java.lang.IllegalAccessError: tried to access method weblogic.rmi.internal.StubInfo.getInterfaces(Ljava/lang/ClassLoader;)[Ljava/lang/Class; from class com.cattsoft.ibss.hub.intf.OSSInterface_trgpb2_HomeImpl_815_WLStub]]
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:512)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:370)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at com.ws.QiangHaoServiceStub.findCdma(QiangHaoServiceStub.java:186)
at test.QiangHaoServiceTest.testfindCdma(QiangHaoServiceTest.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
分享到:
评论

相关推荐

    jboss-web.xml jndi.properties oracle-ds.xml

    数据源在JNDI中注册后,EJB或JPA可以通过JNDI查找机制来获取数据库连接,执行SQL语句,进行数据的读写操作。 这三者结合,为EJB+JPA的应用提供了完整的环境配置:"jboss-web.xml"定义了Web应用与EJB的交互方式,...

    Java Web Service的客户端实现

    Service接口继承自`javax.xml.rpc.Service`,在J2EE环境中,通常通过JNDI(Java Naming and Directory Interface)查找来获取Service实例。以下是一个在J2EE环境中使用生成的Stub的示例代码: ```java package ...

    jndi配置

    2. **应用配置**:在Web应用的web.xml文件中,可以通过`&lt;resource-ref&gt;`元素声明对JNDI资源的引用。 3. **代码中使用**:在Java代码中,通过`InitialContext`实例化并调用`lookup()`方法查找资源。 ```java ...

    JNDI.rar_JINI jndi_JNDI相关书籍_jndi

    在实际项目中,JNDI广泛应用于EJB(Enterprise JavaBeans)的查找、Web应用服务器的配置、JMS(Java Message Service)队列的定位等。理解并掌握JNDI对于任何Java开发者来说,都是提升分布式系统设计和实现能力的...

    jndi-1.2.1.jar.zip

    3. **JDBC数据源**:在Web应用服务器中,JNDI常用来查找和配置数据库连接池,使得应用程序可以通过名称直接获取数据源。 4. **Servlet上下文初始化参数**:在Servlet应用中,JNDI可以用来存储和检索全局配置信息,...

    tomcat配置jndi数据源

    Tomcat 是一个流行的 Java Web 服务器,JNDI(Java Naming and Directory Interface)是 Java 中的一种命名和目录接口规范。Tomcat 中的 JNDI 数据源是指将数据库连接信息注册到 JNDI 服务器中,以便在应用程序中...

    Web_Service开发指南_2.3

    在本“Web Service开发指南_2.3”中,我们将深入探讨Java技术在Web服务开发中的应用。Java是Web服务开发中的重要语言,尤其通过Java API for XML Processing (JAXP)、Java API for XML Web Services (JAXWS) 和 Java...

    websphere上发布基于jndi的应用

    在WebSphere上,JNDI通常用来管理和查找EJB(Enterprise JavaBeans)、数据源、邮件会话、JMS(Java Message Service)队列等。 发布基于JNDI的应用主要包括以下几个步骤: 1. **配置WebSphere应用服务器**:首先...

    Tomcat中配置和使用JNDI.doc

    接下来,需要编辑`TOMCAT_HOME/conf/server.xml`文件,在`&lt;Service&gt;`标签内配置JNDI资源。 1. **定义Context** - 添加`&lt;Context&gt;`元素来指定DBTest应用的上下文路径和文档基础目录: ```xml debug="5" ...

    怎样在J2EE组件中引用和查找Web服务(1).docx

    2. 在上下文中查找Web服务:`Service abf = (Service) ic.lookup("java:comp/env/service/AddressBookService");` 这里,`AddressBookService`是Web服务的引用名,`java:comp/env`是JNDI的标准上下文,`service`是...

    Jboss6.0.0 M4配置jndi和hibernate

    这通常在JBoss启动时自动完成,但也可以通过在`jboss-service.xml`或`standalone.xml`中添加相应配置来手动完成。 3. **应用程序访问**:在应用程序中,可以通过JNDI查找机制获取到数据源,如下所示: ```java ...

    bea jndi 培训

    - **binding**:在JNDI中,binding是指将一个名称(或称作JNDI名称)与一个对象关联起来。这个名字可以用来查找并访问该对象。 - **Resolve**:解析过程是通过JNDI名称查找并返回对应对象的过程。 - **Context**:...

    JNDI简介

    在JNDI中,客户端通过服务接口与服务提供者交互。服务提供者可以是任何类型的命名或目录服务,如 LDAP、DNS 或简单的文件系统。当客户端调用JNDI API进行操作时,JNDI服务会转发请求到相应的服务提供者,并将结果...

    servlet学习笔记_JNDI.doc

    在Web服务器配置文件(如Tomcat的`server.xml`)中,可以通过配置`&lt;Resource&gt;`元素来定义JNDI数据源。 ```xml &lt;Context path="/JNDI" reloadable="true" docBase="E:\workspace\JNDI" workDir="E:\workspace\JNDI\...

    JNDI解析

    3. **Naming** - 在JNDI中,命名是通过一个层次化的名称空间进行的,类似于文件系统的路径。例如,`java:comp/env/jdbc/myDataSource` 就是一个JNDI名称,其中`java:comp/env`是上下文,`jdbc/myDataSource`是子名。...

    WEB服务器工作机制由浅至深(8):【How Tomcat Works】第14章Server和Service

    Server配置通常包括全局JNDI资源、监听器、阀门(Valve)等,这些配置对所有Service都可见。 3. **Service组件** "Service"是Tomcat中的一个中间层,它定义了接收和处理HTTP请求的具体策略。一个Service至少包含一...

    Java Web 整合开发 完全自学手册 源代码

    理解JNDI的工作原理和在Web应用中的使用方法。 5. **JTA与JMS**:Java Transaction API(JTA)和Java Message Service(JMS)是企业级Java应用中处理分布式事务和消息传递的关键技术。学习如何使用JTA进行事务管理...

    Eclipse里配置Ant 组织的Project(3) -- E中配置Tomcat的JNDI

    在Web应用中,我们可能需要配置数据源(DataSource)等JNDI资源,以便于应用在运行时查找和使用。例如,在`context.xml`中,我们可以创建一个名为`jdbc/myDataSource`的数据源: ```xml type="javax.sql....

    java web高级开发

    4. **解决Web开发中的相对路径问题**: 在Web应用中,处理URL路径是常见的挑战。正确使用相对路径和绝对路径,以及理解不同上下文路径对资源引用的影响,是避免路径问题的关键。有时需要利用Spring MVC或其他框架的...

Global site tag (gtag.js) - Google Analytics