Я сменил сервис SOAP в SoapUI. В этом сервисе есть несколько разных методов. для этой фиктивной службы я определил ответ мыла, и все в приложении SoapUI работает.
Я хочу использовать этот сервис в приложении Angular 7. Я уже импортировал пакет ngx-soap и использую его в своем классе обслуживания.
import { Injectable } from '@angular/core';
import { NgxSoapService, Client, ISoapMethodResponse} from 'ngx-soap';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class snExampleService{
message: string;
xmlResponse: string;
jsonResponse: string;
exampleClient: Client;
constructor(private soap: NgxSoapService, private http: HttpClient) {
this.soap.createClient('http://localhost:8080/mocksexampleBinding?WSDL')
.then(client => {
setTimeout(()=>{
client.setEndpoint('http://localhost:8080/mocksexampleBinding');
this.exampleClient = client;
console.log('Client', client) },2000);
})
.catch(err => console.log('Error', err));
}
snExampleCall(snExampleRequest):Observable<ISoapMethodResponse> {
return this.exampleClient.call('methodName',snExampleRequest);
}
}
Метод snExampleCall вызывается из другого компонента, в который внедряется эта служба.
Проблема возникает в браузере (Chrome). Когда я вызываю этот метод в консоли, появляется эта ошибка:
OPTIONS http://localhost:8088/mocksexampleBinding 500 (Internal Server Error)
Access to XMLHttpRequest at 'http://localhost:8088/mockssexampleBinding' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to the preflight request doesn't pass access control check: It does not have HTTP ok status.
И если я посмотрю в сетевом трафике на эту ошибку, чтобы в предварительном
«Метод HTTP, не поддерживаемый сервером: ОПЦИИ»
В приложении SoapUI в настройках скрипта OnRequest я определил следующее:
mockRequest.httpResponse.addHeader( 'Access-Control-Allow-Origin', '*' )
mockRequest.httpResponse.addHeader( 'Access-Control-Allow-Headers', 'SOAPAction,Content-Type' )
mockRequest.httpResponse.addHeader( 'Access-Control-Allow-Methods', 'POST, GET, PUT, OPTIONS, DELETE' )
Но проблема все еще возникает. Я уже пытался запустить Chrome без включенного CORS, и в этом случае все работает нормально. Поэтому я думаю, что это должна быть проблема CORS, которую можно решить в настройках SoapUI или путем добавления некоторых заголовков к вызову SOAP в Angular.
Кто-нибудь может помочь, пожалуйста?