получение исключения при вызове службы SOAP по HTTPS с веб-безопасностью - PullRequest
1 голос
/ 23 ноября 2011

Пожалуйста, помогите мне в решении этой проблемы.

Я пишу Java-клиент Java, чтобы запустить службу SOAP какой-то третьей стороны, которая работает по HTPPS и принимает веб-безопасность в заголовке.В свою очередь, мыльная операция сервис-службы возвращает объект класса.Я написал класс, вызывая сервис, я получаю ниже исключения.Я попытался получить SOAP Envelop, который отправляется в сервис, и выполнил его с помощью инструмента SOAP UI, и получил успешный ответЯ немного сбит с толку, что не так, как в случае, когда я отправляю конверт SOAP с моим клиентом JAVA SOAP, я получаю исключение ниже, при запуске того же конверта SOAP с инструментом SOAP UI я получаю успешный ответ.

Исключениев потоке "main" AxisFault
код ошибки: {http://schemas.xmlsoap.org/soap/envelope/}MustUnderstand
код ошибки: код ошибки: строка_строки: Не понял заголовок (и) "MustUnderstand":
faultActor:
номер_ошибки:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:
в org.apache.axis.handlers.soap.MustUnderstandChecker.invoke (MustUnderstandChecker.java:96)
в org.apache.axis.client.AxisClient.invoke (AxisClient.java:6)
в org.apache.axis.client.Call.invokeEngine (Call.java:2784)
в org.apache.axis.client.Call.invoke (Call.java:2767)
в org.apache.axis.client.Call.invoke (Call.java:1910)
at fibonacci.testing.TestService.main (TestService.java:92)

{http://xml.apache.org/axis/}hostname:localhost

Не понял заголовок (и) MustUnderstand:
на org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:96)
в org.apache.axis.client.AxisClient.invoke (AxisClient.java:206)
в org.apache.axis.client.Call.invokeEngine (Call.java:2784)
в org.apache.axis.client.Call.invoke (Call.java:2767)
в org.apache.axis.client.Call.invoke (Call.java:1910)
в Фибоначчи.testing.TestService.main (TestService.java:92)

Ответы [ 2 ]

0 голосов
/ 23 марта 2017

Я столкнулся с этой проблемой, и я решил ее в своей работе ... этот тип сообщения устанавливается, когда на вашем сервере нет обработчика для обеспечения безопасности. xsdd

в моем случае реализация xsdd была построена на оси 1.4 с использованием java.rmi и javax.xml.rpc.Service

если это ваш случай, у вас будет 2 xsdd для сервера (ns декларация вашего сервиса) и deploy.xsdd для других настроек вашего звонка.

сначала я добавляю к своей нс: операция это ссылки на oasis security, после этого я добавляю к моей службе поток запросов

должно быть что-то вроде этого

<ns1:service name="YOUR SERVICE">  <!-- wss_username_token_over_ssl -->   <requestFlow>
<handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
  <parameter name="passwordCallbackClass" value=" YOUR PASSWORD HANDLER JAVA PATH LOCATION"/>
  <parameter name="action" value="UsernameToken"/>
</handler>   </requestFlow>  
 <ns1:operation name="YOUR OPERATION NAME" 
 xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
     xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
 .... other declarations ... />

в зависимости от уровня безопасности, который вы создаете, в вашем passwordCallbackClassHandler вы должны / или не проверять пользователя и пароль обработчик должен выглядеть примерно так

открытый класс PWCallback реализует CallbackHandler {

  private static final byte[] key = {
    (byte)0x31, (byte)0xfd, (byte)0xcb, (byte)0xda,
    (byte)0xfb, (byte)0xcd, (byte)0x6b, (byte)0xa8,
    (byte)0xe6, (byte)0x19, (byte)0xa7, (byte)0xbf,
    (byte)0x51, (byte)0xf7, (byte)0xc7, (byte)0x3e,
    (byte)0x80, (byte)0xae, (byte)0x98, (byte)0x51,
    (byte)0xc8, (byte)0x51, (byte)0x34, (byte)0x04,
  };

public void handle(Callback[] callbacks)
        throws IOException, UnsupportedCallbackException {
    System.out.println("DENTROOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO");
        for (int i = 0; i < callbacks.length; i++) {
          if (callbacks[i] instanceof WSPasswordCallback) {
            WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
            /*
             * here call a function/method to lookup the password for
             * the given identifier (e.g. a user name or keystore alias)
             * e.g.: pc.setPassword(passStore.getPassword(pc.getIdentfifier))
             * for testing we supply a fixed name/fixed key here.
             */
            if (pc.getUsage() == WSPasswordCallback.KEY_NAME) {
              pc.setKey(key);
            }
            else {
              pc.setPassword("security");
            }
          } else {
            throw new UnsupportedCallbackException(
              callbacks[i], "Unrecognized Callback");
          }
        }
      }
* *} Тысяча двадцать-один

надеюсь, это поможет вам С уважением

0 голосов
/ 23 ноября 2011

Вы, вероятно, проверили ссылку ниже, обсуждая ошибку mustUnderstand именно в контексте Axis http://wso2.org/library/tutorials/understand-famous-did-not-understand-mustunderstand-header-s-error

Вы подтвердили, что весь конверт SOAP из вашего кода и тот, который используется SOAP, одинаковы? в обоих случаях для mustUnderstand установлено значение 1?

...