Spring soap ws не выполняется с запросом без префикса пространства имен в тегах xml - PullRequest
0 голосов
/ 11 октября 2019

У меня уже есть сгенерированный файл wsdl, который я использую для написания мыла springboot ws, но когда я загружаю этот файл wsdl в soapUi, чтобы создать запрос для проверки моего ws, я получаю запрос, в котором отсутствуют вложенные теги с префиксом пространства имен. При запуске этого запроса springboot выдает исключение saaj мыла с ошибкой 404. Из-за тега без префикса.

Когда я вручную добавил префикс пространства имен для всех тегов, ws работал правильно.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.studentinfo.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:studentData>
         <student>
               <name>?</name>
               <roll_number>?</roll_number>
               <address>
                  <house_number>?</house_number>
                  <street>?</street>
                  <city>?</city>
                  <state>?</state>
               </address>
            </student>
    </web:studentData>
   </soapenv:Body>
</soapenv:Envelope>

Если я добавлю «web:» во все вложенные теги внутри тега, мой ws будет работать как положено, но для вышеприведенного запроса его нет. Так как я не могу изменить формат wsdl как вывод какого-либо стороннего приложения, есть ли способ, вызвав сам этот запрос, я получу свою работу ws.

1 Ответ

0 голосов
/ 12 октября 2019

Вы можете добавить определенный маппер в свою конфигурацию следующим образом:

public class MyNamespaceMapper extends NamespacePrefixMapper {

private static final String FOO_PREFIX = ""; // DEFAULT NAMESPACE
private static final String FOO_URI = "http://www.example.com/FOO";

private static final String BAR_PREFIX = "bar";
private static final String BAR_URI = "http://www.example.com/BAR";

@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
    if(FOO_URI.equals(namespaceUri)) {
        return FOO_PREFIX;
    } else if(BAR_URI.equals(namespaceUri)) {
        return BAR_PREFIX;
    }
    return suggestion;
}

@Override
public String[] getPreDeclaredNamespaceUris() {
    return new String[] { FOO_URI, BAR_URI };
}

}

Вы можете следовать этому учебнику . Тем не менее, это может быть проблемой для пружины ws, вам нужно добавить эту конфигурацию spring ws.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...