2009-08-18 4 views
2

우리는 프로젝트에서 Spring Remoting을 사용하고 있습니다. 웹 서비스에 액세스하기 위해 다른 시스템과 함께 사용됩니다. 우리는 현재 웹 서비스에 필요한 매개 변수 측면에서 진화하고 있습니다. 동시에 우리는 소비자로부터 독립하려고 노력하고 있습니다.Spring Remoting 직렬화 및 비 직렬화

현재, 내 질문은 직렬화 및 deserialization 봄 remoting 작동 방식을 주위에 있습니다. 여기에 세부 사항은 다음과 같습니다

I 클래스에 매개 변수를 다음했다 스프링 원격을 통해 노출 된 웹 서비스를 현재 모든 소비자

  1. 이름
  2. 주소

각 스텁을 사용하면 그에 따라 직렬화 및 직렬화가 발생합니다. 내가 언급 한 바와 같이

우리는 필드를 다음

지금 "

  1. 이름
  2. 주소
  3. 국가
  4. 생년월일 (DateOfBirth)를 포함하는 각각 웹 서비스와 클래스를 진화 그러나 소비자는 아직도 오래되었던 그루터기를 가지고있다. r stub-jar를 사용하여 웹 서비스에 액세스합니다. 우리는 스파이크를 만들었고, 새로 추가 된 필드에 상관없이 리모팅 서비스가 계속 잘 작동하는 것처럼 보입니다. 나는 필드의 개수가 추가 된 이후 소비자의 요구에 폭탄을 기대하고 있었다. "필드를 삭제하거나 클래스에서 제거하지 마시기 바랍니다". 추가 만되었습니다.

    스프링 리모팅은 추가 입력란을 정상적으로 처리하나요, 아니면 침대에 기대해야합니까?

    내 질문에 분명하지 않은 점이 있으면 알려주십시오. 제가 제시하려고하는 궁극적 인 질문은, 제 프로그램이 폭탄을 터뜨리 길 기대하고 있습니까? 현재 뭔가 잘못 테스트하고있는 중입니다. 스프링 리모팅은 어떻게 교환되는 객체를 직렬화하고 비 직렬화합니까?

+0

이것은 Spring과는 아무런 관련이 없습니다. 일반적인 java.io 직렬화 질문입니다. – skaffman

+0

Spring은 직렬화와 역 직렬화를 처리한다.확실하지 않은데, 만약 스프링이 자바가 제공하는 것의 맨 위에 아무것도 없다면, 아니면 그냥 기본적인 자바 물건을 호출 할 것입니다. 나는 그 점에 대해서도 분명히 밝히고 싶다. – Priyank

+0

아니요, Spring은 직렬화를 처리하지 않으므로 JRE에서 제공하는 직렬화 기능을 사용합니다. – skaffman

답변

1

스프링 직렬화는 Java 직렬화의 규칙을 따릅니다.

변경 사항이 실제로 serialVersionUID에 영향을 미치고 변경되지 않았 음을 사용자가 직접 확인하지 않았는지 확인하십시오.

+0

감사합니다. serialVersionUID를 변경하지 않고 보관했기 때문에 리모팅 스텁과 클래스가 계속 작동하는 이유가 명확하게 설명되어 있습니다. 건배 – Priyank

1

저는 Spring Remoting이 Java 직렬화가 아닌 HTTP를 기반으로한다고 생각했습니다. 이 경우 매개 변수 이름/값 쌍이며 기존 클라이언트가 예상하는 매개 변수를 제거하지 않는 한 계속 작업해야합니다.

skaffman을 확인하십시오. 봄에 대한 지식이 뛰어나고 지금 휴가 중이 야. 내 친구의 컴퓨터에서 더 오래 머물면서 주제를 연구하는 것은 무례한 행동입니다. 죄송합니다. 더 도움이되지 않습니다.

+4

Spring의 HTTP 호출자는 여전히 표준 Java 직렬화를 맨 아래에서 사용합니다. OSGi에서 사용하기 위해 비 직렬화를 수정해야 할 필요가 있었기 때문에 나는 그 배짱이 깊었습니다. – SteveD

+0

이것이 맞습니다. Spring의 HttpInvoker는 HTTP 전송을 통해 자바 직렬화 된 객체를 제공합니다. – skaffman

+0

모든 입력에 대해 감사합니다. 참으로 올바른 방향으로 나를 가리켰습니다. – Priyank