0

클라이언트 프로젝트 및 웹 서비스 프로젝트에 정의 된 직렬화 가능을 구현하는 사용자 정의 객체가 있습니다. 나는 비누 메시지를 통해 바이트 배열로 객체를 전달하려는, 그러나 나는이 작업을 수행 할 때, 객체를 재건에서 웹 서비스의 방법은 다음과 스택으로 클래스를 찾을 수 없습니다 예외가 있습니다바이트 배열에 Java 직렬화 가능 객체를 webservice로 보내기 java.lang.classnotfoundexception

java.lang.ClassNotFoundException: com.myproject.biosign.client.vo.Istante 

주 예외로 참조 된 경로가 클라이언트에있는 객체의 경로이고 올바르게 웹 서비스에서 찾을 수 없다는 것을 의미합니다. 어떻게 내가 webservice에서 동일한 개체의 정의와 개체를 다시 작성할 수 있습니까?

변환 코드, 전송 코드 및 해독 코드를 따르십시오.

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    try { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     ObjectOutput out = null; 

      out = new ObjectOutputStream(bos); 
      out.writeObject(istanti.get(0)); 
      byte[] yourBytes = bos.toByteArray(); 

      out.close(); 
      bos.close(); 

     request.addProperty("lista", yourBytes);     

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

     envelope.dotNet = false; 
     envelope.setOutputSoapObject(request); 

     Marshal floatMarshal = new MarshalFloat(); 
     floatMarshal.register(envelope); 
     new MarshalBase64().register(envelope); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     androidHttpTransport.debug = true; 

     androidHttpTransport.call(SOAP_ACTION, envelope); 

WS 방법에있어서 : 클라이언트 방법에

ByteArrayInputStream bis = new ByteArrayInputStream(lista); 
      ObjectInput in = null; 
      try { 
      in = new ObjectInputStream(bis); 
      Object o = in.readObject(); 
      Istante ist = (Istante) o; 
      System.out.println("eccoci" + ist.getXCoord()); 
      bis.close(); 
      in.close(); 

답변

0

, 당신은 모두 클라이언트 클래스 Istante을해야합니다 자바의 직렬화 당신이이 방법을 사용하려면 클라이언트와 서버가 classpath에 있습니다.

Istante의 바이트 코드를 서버에 전송 한 다음 사용자 정의 클래스 로더를 사용하여 해당 클래스를 해결할 수 있습니다. 그러나 나는 이것을하지 않는 것이 좋습니다. 멋진 JSON 교환 형식이 더 나은 선택입니다.

가장 쉬운 해결책은 서버 클래스 패스에 Istante 인 jar 파일을 포함시키는 것입니다.

관련 문제