2017-10-31 33 views
-1

今日私はJava Webサービスで私の最初のステップを実行しました。 私はボトムアップのために決めました。だから、私は別のユーザーのためのクラスを書いた(サーバーはテキストファイルからユーザーを読み込む)。複雑なオブジェクトのJava Webサービスラップ配列

すべてのユーザーは名前とIDを持っています。さらに、サーバーはすべてのユーザーを歓迎する方法を提供します。クライアントはサーバーからユーザーの配列を受け取ります。その後、クライアントはループ内でサーバーにユーザー名を送信し、サーバーはウェルカム文字列で応答し、クライアントで印刷されます。ここまではすべて期待どおりに動作します。

ここでは、各ユーザーの友だちのリストが必要です。だからこそ私は新しい人を育てるのです。私はすべての人のための友人とテキストファイルを作成しました。サーバーは、期待どおりにそのファイルから友人を読み取ります。私は自分のユーザークラス内の配列に友人を追加したいと思うと、私はnullpointerを取得します。私は複雑な型の中に配列を持つことができないのだろうかと思います。

package mycode; 

import java.util.List; 

public class User { 

private String vorname, nachname; 
private int id; 
private Person[] persons; 

public User() 
{ 

} 

public User(String vorname, String nachname, int id) { 
    this.vorname=vorname; 
    this.nachname=nachname; 
    this.id=id; 
    init(); 
} 

public String getVorname() { 
    return vorname; 
} 

public String getNachname() { 
    return nachname; 
} 

public int getId() { 
    return id; 
} 

private void init() 
{ 
    System.out.println("Start Personreader"); 
    Personreader personreader = new Personreader(); 
    System.out.println("Personreader aufgebaut"); 
    List<Person>personen = personreader.getPersons("c:/temp/"+this.getId()+".txt"); 
    System.out.println("Es wurden "+personen.size()+" personen gelesen"); 
    personen.toArray(persons); 
    System.out.println("Personreader fertig"); 
} 

public Person[] getPersons() 
{ 
    System.out.println(" Es wurden "+persons.length+" Personen gefunden"); 
    return persons; 
} 
} 

スタートスタートPersonreader Personreader aufgebautエスwurden 2 personen gelesen

OKT 31、2017 9時17分50秒PMで終了org.apache.axis.utils.JavaUtils (javax.activation.DataHandlerおよびjavax.mail.internet.MimeMultipart)必要なクラスが見つかりません。 添付ファイルのサポートが無効になっています。 AxisFaultにfaultCode: {http://schemas.xmlsoap.org/soap/envelope/} Server.userException faultSubcode:faultStringの:java.lang.NullPointerExceptionが faultactorは:faultNode:faultDetail: {http://xml.apache.org/axis/}ホスト名:ルディ-PC

java.lang.NullPointerExceptionがorg.apacheで org.apache.axis.encoding.DeserializationContext.endElementで.axis.message.SOAPFaultBuilder.createFault org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)で(SOAPFaultBuilder.java:222) (DeserializationContext.java:1087) at com.su はcom.sunで com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(不明 出典)でn.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(不明 出典)。 はcom.sunで com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(不明 出典)でorg.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next(不明 出典)。 com.sun.orgで com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(不明 出典)でorg.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(不明 出典)。 apache.xerces.inte com.sun.org.apache.xerces.internalで com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(不明 出典)でrnal.parsers.XML11Configuration.parse(不明 出典)。 parser.XMLParser.parse(不明な ソース) com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(不明な ソース)at com.sun.org.apache.xerces.internal.jaxp。 SAXParserImpl $ JAXPSAXParser.parse(不明な ソース) com.sun.org.apache.xerces.internal.jaxp。 組織でorg.apache.axis.SOAPPart.getAsSOAPEnvelopeで org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) (SOAPPart.java:696)でSAXParserImpl.parse(不明 出典)。 apache.axis.Message.getSOAPEnvelope(Message.java:435)at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) at org.apache.axis.client.AxisClient.invoke( (Call.java:2767)at org.apache.axis.client.Call.invokeEngine(Call.java:2784)at org.apache.axis.client.Call.invoke(Call.java:2767)at org。 apache.axis.client.Call.invoke(Call.java:2443)at org.apache.axis.client.Call.invoke(Call.java:2366)at org.apache .axis.client.Call.invoke(Call.java:1812)at mycode.WorkerSoapBindingStub.getUsers(WorkerSoapBindingStub.java:206) at mycode.Starter.work(Starter.java:20) mycode.Starter.main (Starter.java:12)

生成WDSL:

<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions targetNamespace="http://mycode" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://mycode" xmlns:intf="http://mycode" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<!--WSDL created by Apache Axis version: 1.4 
Built on Apr 22, 2006 (06:55:48 PDT)--> 
<wsdl:types> 
    <schema elementFormDefault="qualified" targetNamespace="http://mycode" xmlns="http://www.w3.org/2001/XMLSchema"> 
    <element name="getUsers"> 
    <complexType/> 
    </element> 
    <element name="getUsersResponse"> 
    <complexType> 
    <sequence> 
     <element maxOccurs="unbounded" name="getUsersReturn" type="impl:User"/> 
    </sequence> 
    </complexType> 
    </element> 
    <complexType name="Person"> 
    <sequence> 
    <element name="nachname" nillable="true" type="xsd:string"/> 
    <element name="vorname" nillable="true" type="xsd:string"/> 
    </sequence> 
    </complexType> 
    <complexType name="ArrayOfPerson"> 
    <sequence> 
    <element maxOccurs="unbounded" minOccurs="0" name="item" type="impl:Person"/> 
    </sequence> 
    </complexType> 
    <complexType name="User"> 
    <sequence> 
    <element name="id" type="xsd:int"/> 
    <element name="nachname" nillable="true" type="xsd:string"/> 
    <element name="persons" nillable="true" type="impl:ArrayOfPerson"/> 
    <element name="vorname" nillable="true" type="xsd:string"/> 
    </sequence> 
    </complexType> 
    <element name="getFriends"> 
    <complexType> 
    <sequence> 
     <element name="id" type="xsd:int"/> 
    </sequence> 
    </complexType> 
    </element> 
    <element name="getFriendsResponse"> 
    <complexType> 
    <sequence> 
     <element maxOccurs="unbounded" name="getFriendsReturn" type="impl:User"/> 
    </sequence> 
    </complexType> 
    </element> 
    <element name="calc"> 
    <complexType> 
    <sequence> 
     <element name="a" type="xsd:int"/> 
     <element name="b" type="xsd:int"/> 
    </sequence> 
    </complexType> 
    </element> 
    <element name="calcResponse"> 
    <complexType> 
    <sequence> 
     <element name="calcReturn" type="xsd:int"/> 
    </sequence> 
    </complexType> 
    </element> 
    <element name="sayHallo"> 
    <complexType> 
    <sequence> 
     <element name="name" type="xsd:string"/> 
    </sequence> 
    </complexType> 
    </element> 
    <element name="sayHalloResponse"> 
    <complexType> 
    <sequence> 
     <element name="sayHalloReturn" type="xsd:string"/> 
    </sequence> 
    </complexType> 
    </element> 
    </schema> 
</wsdl:types> 

    <wsdl:message name="getFriendsResponse"> 

     <wsdl:part element="impl:getFriendsResponse" name="parameters"> 

     </wsdl:part> 

    </wsdl:message> 

    <wsdl:message name="calcResponse"> 

     <wsdl:part element="impl:calcResponse" name="parameters"> 

     </wsdl:part> 

    </wsdl:message> 

    <wsdl:message name="getUsersResponse"> 

     <wsdl:part element="impl:getUsersResponse" name="parameters"> 

     </wsdl:part> 

    </wsdl:message> 

    <wsdl:message name="sayHalloRequest"> 

     <wsdl:part element="impl:sayHallo" name="parameters"> 

     </wsdl:part> 

    </wsdl:message> 

    <wsdl:message name="getFriendsRequest"> 

     <wsdl:part element="impl:getFriends" name="parameters"> 

     </wsdl:part> 

    </wsdl:message> 

    <wsdl:message name="getUsersRequest"> 

     <wsdl:part element="impl:getUsers" name="parameters"> 

     </wsdl:part> 

    </wsdl:message> 

    <wsdl:message name="sayHalloResponse"> 

     <wsdl:part element="impl:sayHalloResponse" name="parameters"> 

     </wsdl:part> 

    </wsdl:message> 

    <wsdl:message name="calcRequest"> 

     <wsdl:part element="impl:calc" name="parameters"> 

     </wsdl:part> 

    </wsdl:message> 

    <wsdl:portType name="Worker"> 

     <wsdl:operation name="getUsers"> 

     <wsdl:input message="impl:getUsersRequest" name="getUsersRequest"> 

     </wsdl:input> 

     <wsdl:output message="impl:getUsersResponse" name="getUsersResponse"> 

     </wsdl:output> 

     </wsdl:operation> 

     <wsdl:operation name="getFriends"> 

     <wsdl:input message="impl:getFriendsRequest" name="getFriendsRequest"> 

     </wsdl:input> 

     <wsdl:output message="impl:getFriendsResponse" name="getFriendsResponse"> 

     </wsdl:output> 

     </wsdl:operation> 

     <wsdl:operation name="calc"> 

     <wsdl:input message="impl:calcRequest" name="calcRequest"> 

     </wsdl:input> 

     <wsdl:output message="impl:calcResponse" name="calcResponse"> 

     </wsdl:output> 

     </wsdl:operation> 

     <wsdl:operation name="sayHallo"> 

     <wsdl:input message="impl:sayHalloRequest" name="sayHalloRequest"> 

     </wsdl:input> 

     <wsdl:output message="impl:sayHalloResponse" name="sayHalloResponse"> 

     </wsdl:output> 

     </wsdl:operation> 

    </wsdl:portType> 

    <wsdl:binding name="WorkerSoapBinding" type="impl:Worker"> 

     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 

     <wsdl:operation name="getUsers"> 

     <wsdlsoap:operation soapAction=""/> 

     <wsdl:input name="getUsersRequest"> 

      <wsdlsoap:body use="literal"/> 

     </wsdl:input> 

     <wsdl:output name="getUsersResponse"> 

      <wsdlsoap:body use="literal"/> 

     </wsdl:output> 

     </wsdl:operation> 

     <wsdl:operation name="getFriends"> 

     <wsdlsoap:operation soapAction=""/> 

     <wsdl:input name="getFriendsRequest"> 

      <wsdlsoap:body use="literal"/> 

     </wsdl:input> 

     <wsdl:output name="getFriendsResponse"> 

      <wsdlsoap:body use="literal"/> 

     </wsdl:output> 

     </wsdl:operation> 

     <wsdl:operation name="calc"> 

     <wsdlsoap:operation soapAction=""/> 

     <wsdl:input name="calcRequest"> 

      <wsdlsoap:body use="literal"/> 

     </wsdl:input> 

     <wsdl:output name="calcResponse"> 

      <wsdlsoap:body use="literal"/> 

     </wsdl:output> 

     </wsdl:operation> 

     <wsdl:operation name="sayHallo"> 

     <wsdlsoap:operation soapAction=""/> 

     <wsdl:input name="sayHalloRequest"> 

      <wsdlsoap:body use="literal"/> 

     </wsdl:input> 

     <wsdl:output name="sayHalloResponse"> 

      <wsdlsoap:body use="literal"/> 

     </wsdl:output> 

     </wsdl:operation> 

    </wsdl:binding> 

    <wsdl:service name="WorkerService"> 

     <wsdl:port binding="impl:WorkerSoapBinding" name="Worker"> 

     <wsdlsoap:address location="http://localhost:8080/Listentest/services/Worker"/> 

     </wsdl:port> 

    </wsdl:service> 

</wsdl:definitions> 
+1

あなたは 'personen.toArray(persons);とは何と思いますか? 「人」が「ヌル」の間に電話すると、どうなると思いますか? – azurefrog

答えて

0

は、私は、アレイ(人)に私のjava.util.List(personen)に変換するための方法だと思いました。それは正しいのではないですか? nullのヒントの 感謝の:

... 
persons= new Person[personen.size()]; 
     personen.toArray(persons); 
     System.out.println("Personreader fertig"); 

はトリックをしました。

関連する問題