Я получил помощь от моего друга и смог прийти к ответу.Проблема в том, что вызов soap дает ответ мыла, который приходит в виде компонента типа "FrsFileSoapDO".Поскольку я не дал ничего в коде того, как моя программа будет воспринимать полученный bean-компонент, это дало мне сообщение об ошибке «не удалось найти десериализатор для типа {http://Url}FrsFileSoapDO
».Чтобы устранить проблему, нужно сделать следующее:
1) создать «QName», чтобы сказать, к какому пространству имен относится «FrsFileSoapDO».
2) создать сериализатор Bean (который знает, каксериализуйте бин),
3) создайте десериализатор бина (который знает, как десериализовать бин),
4) Сделайте отображение, говоря, что QName q отображается в класс FrsFileSoapDO.class(перед этим убедитесь, что у вас есть класс FrsFileSoapDO.class и вы его импортировали)
Теперь давайте реализуем это в программе (здесь я повторяю только блок try)
try {
String endpoint ="http://RequestUrl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
QName q = new QName ("http://Url", "FrsFileSoapDO"); // step 1
BeanSerializerFactory bsf = new BeanSerializerFactory(FrsFileSoapDO.class,q); // step 2
BeanDeserializerFactory bdf = new BeanDeserializerFactory(FrsFileSoapDO.class,q); // step 3
call.registerTypeMapping(FrsFileSoapDO.class,q, bsf, bdf); //step 4
call.setOperationName(new QName(endpoint, "getFrsFileData"));
FrsFileSoapDO s = (FrsFileSoapDO) call.invoke(new Object[] { "24BB7","frs1001" } );
System.out.println(s.getFilename());
}
Это работает, давая мне ожидаемый результат.
Документ для функций Call, BeanSerializerFactory, BeanDeserializerFactory доступен по адресу BeanSerializerFactory и BeanDeserializerFactory