2011-04-20 3 views
1

데이터베이스의 사용자 데이터를 단순히 표시하는 웹 서비스를 만들었습니다. 그러나 나는 클라이언트 측을 실행할 때이 예외를 계속 얻고있다.기본 웹 서비스에서 예외 받기

Couldn't create SOAP message due to exception: XML reader error: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF; was expecting a close tag for element at [row,col {unknown-source}]: [1,110]

/////////////////////이 웹 서비스 코드입니다 ////////////////// //////////////

@WebMethod (operationName = "viewUserData")는

public ArrayList viewUserData() { 
    //TODO write your implementation code here: 
    Statement stmt = null; 
    ResultSet rs = null; 
    String query = ""; 
    //ArrayList<HashMap> list = new ArrayList<HashMap>(); 
    ArrayList list = new ArrayList(); 

    try { 
     String connectionURL = "jdbc:oracle:thin:@p5"; 
     Connection connection = null; 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     connection = DriverManager.getConnection(connectionURL, "backconnect", "backconnect"); 
     query = "select * from users"; 
     stmt = connection.createStatement(); 
     rs = stmt.executeQuery(query); 

     while(rs.next()){ 
      /*HashMap<String,Object> map = new HashMap<String,Object>(); 
      map.put("USER_ID", rs.getString("USER_ID")); 
      map.put("NAME", rs.getString("NAME")); 
      map.put("SHORT_NAME", rs.getString("SHORT_NAME")); 
      map.put("PASSWORD", rs.getString("PASSWORD"));*/ 
      SetData sdata = new SetData(); 
      sdata.setUSER_ID(rs.getString("USER_ID")); 
      sdata.setNAME(rs.getString("NAME")); 
      sdata.setSHORT_NAME(rs.getString("SHORT_NAME")); 
      sdata.setPASSWORD(rs.getString("PASSWORD")); 
      /*list.add(rs.getString("USER_ID")); 
      list.add(rs.getString("NAME")); 
      list.add(rs.getString("SHORT_NAME")); 
      list.add(rs.getString("PASSWORD"));*/ 
      list.add(sdata); 
     } 
    } catch (Exception ex) { 

     System.out.println(ex.getMessage()); 
    } 
    return list; 
} 

SetData를 자바 빈 이다 ////////// ////////// 클라이언트 코드 ///////////////////

package1.GetUserDataService service = new package1.GetUserDataService(); 
package1.GetUserData port = service.getGetUserDataPort(); 
// TODO process result here 
java.util.List<java.lang.Object> result = port.viewUserData(); 
out.println("Result = "+result); 

이걸 붙들고있어. 이 문제를 해결하는 방법.

답변

1

나는 이것이 클라이언트 오류 또는 서버 오류인지 여부를 확인하려고합니다.

Fiddler 또는 Wireshark을 사용하여 클라이언트에서 서버로가는 트래픽을 차단하고 SOAP 요청이 유효하게 보이는지 확인하십시오.

당신은 클라이언트 측 또는 서버 측에서 예외 자체를 얻을 수 있는지 말했다하지 않은, 그래서이 요청이 좋아지고 있지만, 클라이언트가 제대로 응답를 읽고되지 않은 가능성이 있습니다.

편집 : 사물을 단순화하기 위해 순간적으로 일부 데이터 만 하드 코딩 할 수 있습니다. 그것은 이 문제가 데이터베이스 코드 자체 내에서 보이는 것처럼을 보지 않으므로 모든 것을 제거하여 진단을 더 쉽게 만들 수 있습니다. 단지 하드 코드의 두 번째 이름을 반환해야합니다. int, 문제가 ArrayList을 사용하고 있는지 확인하기 만하면됩니다.

+0

이 클라이언트 측에서 예외를 throw하고 있습니다. java.util.List result = port.viewUserData(); –

+0

@Java_NewBie : 클라이언트 쪽에서 오류가보고되면 결국 어떤 일이 벌어지고 돌아 왔는지 확인할 수 있습니다. –

+0

@Java_NewBie : Jon recommentdations 이외에 : [soapUI] (http://www.eviware.com/soapUI/soapui-products-overview.html)로 웹 서비스를 테스트하십시오. * 그 *가 작동하고 메시지가 잘 보이면, 그런 다음 클라이언트에서 조사하십시오. –

1

jdbc 공급자가 지원하는 경우 웹 서비스에서 WebRowSet을 반환 할 수 있습니다. 다음은 예를 들어

import javax.sql.rowset.WebRowSet; 
import com.sun.rowset.WebRowSetImpl; // Reference implementation 
... 
// get ResultSet rs from db 
WebRowSet webrowset = new WebRowSetImpl(); 
webrowset.populate(rs); 
// return webrowset from web service 

사용중인 SetData를 자바 콩을 제거 할 수 있습니다이 방법입니다.

+0

만약 내가 이것을 할 수 있다면. > HashMap map = 새로운 HashMap(); map.put ("USER_ID", rs.getString ("USER_ID")); map.put ("NAME", rs.getString ("NAME")); map.put ("SHORT_NAME", rs.getString ("SHORT_NAME")); map.put ("PASSWORD", rs.getString ("PASSWORD")); 그리고 목록에이지도를 추가하지만 여전히 오류를주고있다, 나는 당신의 솔루션을 시도했지만 전개 isi'nt. –

1

나는 동일한 문제에 직면했으며 프로젝트에 누락 된 일부 인공물을 추가하여 해결했습니다.

<dependency> 
<groupId>org.apache.cxf</groupId> 
<artifactId>cxf-rt-transports-http-jetty</artifactId> 
<version>${cxf.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>ezmorph</groupId> 
     <artifactId>ezmorph</artifactId> 
     <version>1.0.5</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>fife</groupId> 
     <artifactId>rsyntaxtextarea</artifactId> 
     <version>1.3.4</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>commons-httpclient</groupId> 
     <artifactId>commons-httpclient</artifactId> 
     <version>3.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>commons-cli</groupId> 
     <artifactId>commons-cli</artifactId> 
     <version>1.0</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>bouncycastle</groupId> 
     <artifactId>bcprov-jdk15</artifactId> 
     <version>143</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>jtidy</groupId> 
     <artifactId>jtidy</artifactId> 
     <version>r820</version> 
     <scope>test</scope> 
    </dependency> 

PS : 그 CXF 인해이 누락 된 유물에 클라이언트 측에서 메시지의 페이로드를 채울 수없는 것 같습니다 2.4

: 내가 WS CXF 버전을 호출하는 단위 테스트 클래스를 사용

희망이 도움이됩니다!

관련 문제