Вы упомянули, что маршаллинг работает. Я не вижу причин, по которым демаршаллинг не сработает. Вы тестировали маршалл и демаршалл в изоляции?
Просто чтобы убедиться, что запрос мыла в порядке, Можете ли вы добавить перехватчик журналирования и распечатать фактический запрос, поступающий от клиента, обращающегося к веб-службе, Добавьте этот фрагмент в свой файл контекста
<sws:interceptors>
<bean class="org.springframework.ws.soap.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor">
<property name="logRequest" value="true"></property>
<property name="logResponse" value="true"></property>
</bean>
</sws:interceptors>
Вы должны увидеть подобное сообщение в журнале, содержащее весь запрос мыла, я добавляю запрос сообщения журнала из пользовательского интерфейса saop в
DEBUG [http-8080-2]:endpoint.interceptor.SoapEnvelopeLoggingInterceptor.logMessage - Request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://hoost:port/context/patient/schemas">
<soapenv:Header/>
<soapenv:Body>
<sch:addRequest>
<sch:patient>
<sch:id>?</sch:id>
<sch:lastname>Joe</sch:lastname>
</sch:patient>
</sch:addRequest>
</soapenv:Body>
</soapenv:Envelope>
ОБНОВЛЕНИЕ ответа
Возможно, ваш запрос на мыло не уверен,
<sch:FirstName>firstname</sch:FirstName> (this should be)
<sch:firstName>firstname</sch:firstName>
Еще одно обновление
Исключение связано с тем, как вы определили конечную точку. В своем запросе мыла ( sch: AddPersonRequest ) вы отправляете addPersonRequest, а не Person в качестве полезной нагрузки, поэтому измените конечную точку, чтобы отразить это, @RequestPayload должен быть AddPersonRequest, а не Person
@PayloadRoot(namespace = "http://www.example.org/person/schema", localPart = "AddPersonRequest")
@ResponsePayload
public AddPersonRequest addPersonRequest(@RequestPayload AddPersonRequest request, SoapHeader header) {