[英]ArrayOfObjects cannot be cast to Java.util.Collection
I tried googeling this for several hours with all different approaches. 我尝试了使用所有不同方法将其胶粘几个小时。
Here the code in Java which calls a Web Service method in ASP .Net C# 这里的Java代码调用ASP .Net C#中的Web服务方法
public DefaultTableModel SelectAllProjects ()
{
try{
DefaultTableModel DtM;
Collection c = (Collection)wws.selectAllProjects();
Iterator iter = c.iterator();
DtM = new DefaultTableModel();
DtM.addColumn("Project ID:");
DtM.addColumn("Project Name:");
DtM.addColumn("Project Description:");
Vector vec = new Vector(c.size());
while(iter.hasNext()){
Project p = new Project();
p.getPId();
p.getPName();
p.getPDescript();
vec.add(p);
DtM.addRow(vec);
}
return DtM;
}
catch(Exception e)
{
System.out.println(e);
return null;
}
}
And here's the webservice method... 这是网络服务方法...
[WebMethod]//Ska vara collection
public List<Project> SelectAllProjects()
{
Controller contr = new Controller();
List<Project> project = contr.SelectAllProjects();
return project;
}
I know that method is working because a Windows Forms Application written i C# can successfully call it. 我知道该方法有效,因为使用C#编写的Windows窗体应用程序可以成功调用它。
I also know the connection between Java and Web Services work since I can call the other methods. 我还知道Java和Web服务之间的连接,因为我可以调用其他方法。
My Catch(Exception e) returns the following message: 我的Catch(Exception e)返回以下消息:
java.lang.ClassCastException: javaapp.ArrayOfProject cannot be cast to java.util.Collection
Thanks for the answers, couldn't find anything close. 感谢您的回答,找不到附近的东西。
Ps Tried Object[] obj = (Object[])wws.selectAllProjects();
Ps尝试过
Object[] obj = (Object[])wws.selectAllProjects();
and Project[] proj = (Project [])wws.selectAllProjects();
和
Project[] proj = (Project [])wws.selectAllProjects();
Request for the Auto-generated ArrayOfProject.java class 请求自动生成的ArrayOfProject.java类
package javaapp;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import java.util.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfProject", propOrder = { "project" })
public class ArrayOfProject {
@XmlElement(name = "Project", nillable = true)
protected List<Project> project;
public List<Project> getProject() {
if (project == null) {
project = new ArrayList<Project>();
}
return this.project;
}
}
Code From my view class.. (The button I press) 来自我的视图类的代码。(我按下的按钮)
private void btnAllProjects_actionPerformed(ActionEvent e) {
try{
Controller control = new Controller();
DefaultTableModel DtM;
DtM = control.SelectAllProjects();
JTable selectProjectsTable = new JTable (DtM);
}
catch (Exception ex)
{
System.out.println(ex);
}
}
List of my latest Exceptions: 我最新的例外清单:
C:\Oracle\Middleware\jdk160_24\bin\javaw.exe -client -classpath "C:\Users\MS\Desktop\Web Services\Java Uppgift 2\.adf;C:\Users\MS\Desktop\Web Services\Java Uppgift 2\JavaApp\classes;C:\Oracle\Middleware\wlserver_10.3\server\lib\weblogic.jar;C:\Oracle\Middleware\oracle_common\modules\oracle.jrf_11.1.1\jrf.jar;C:\Oracle\Middleware\modules\com.oracle.toplink_1.0.0.0_11-1-1-5-0.jar;C:\Oracle\Middleware\modules\org.eclipse.persistence_1.1.0.0_2-1.jar;C:\Oracle\Middleware\modules\com.bea.core.antlr.runtime_2.7.7.jar;C:\Oracle\Middleware\modules\javax.persistence_1.0.0.0_2-0-0.jar;C:\Oracle\Middleware\oracle_common\modules\oracle.xdk_11.1.0\xmlparserv2.jar;C:\Oracle\Middleware\oracle_common\modules\oracle.xdk_11.1.0\xml.jar;C:\Oracle\Middleware\oracle_common\modules\oracle.nlsrtl_11.1.0\orai18n-mapping.jar" -Djavax.net.ssl.trustStore=C:\Users\MS\AppData\Local\Temp\trustStore7859653733656575754.jks javaapp.Main
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.Vector.ensureCapacityHelper(Vector.java:226)
at java.util.Vector.insertElementAt(Vector.java:554)
at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:357)
at javax.swing.table.DefaultTableModel.addRow(DefaultTableModel.java:333)
at javaapp.Controller.SelectAllProjects(Controller.java:56)
at javaapp.View.btnAllProjects_actionPerformed(View.java:103)
at javaapp.View.access$200(View.java:24)
at javaapp.View$3.actionPerformed(View.java:68)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6289)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6054)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4652)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
您需要Arrays.asList方法将数组转换为List即Collection
The class javaapp.ArrayOfProject
needs to implement Collection
类
javaapp.ArrayOfProject
需要实现Collection
As an alternative you can create a wrapper which implements Collection. 或者,您可以创建一个实现Collection的包装器。
The simplest is likely to be to create an ArrayList, copy all the elements and use the ArrayList. 最简单的方法可能是创建一个ArrayList,复制所有元素并使用ArrayList。
考虑到数组不是集合,在Arrays
类上有一个称为asList
的实用程序方法,该方法将数组作为参数。
ArrayOfProject
is a class that your SOAP framework generated. ArrayOfProject
是您的SOAP框架生成的类。 It's just a regular Java class. 这只是一个普通的Java类。 Check what getters it has, depending on the framework used there'll be something that either returns an array or a list.
检查它具有什么吸气剂,具体取决于所使用的框架,将有一些返回数组或列表的东西。
In your code edit this line: 在您的代码中编辑以下行:
Collection c = (Collection)wws.selectAllProjects();
to 至
Collection c = wws.selectAllProjects().getProject();
The rest will then work as-is. 其余的将按原样工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.