У меня есть xsd файл Foo.xsd. Я попробовал следующие способы отослать его в файле WSDL, но это не работает.
1) помещенный xsd файл в локальную файловую систему и импортированный это как
<xsd:import namespace="http://ws.test.com/" schemaLocation="file:///D:/wsdl/Foo.xsd"></xsd:import>
2) Помещенный xsd файл в веб-корневую папку и импортированный как
<xsd:import namespace="http://ws.test.com/" schemaLocation="http://localhost:8080/Xfire/Foo.xsd"></xsd:import>
Когда я выполняю клиент, я становлюсь пустым для полей объекта ответа. Но это работает, когда я встраиваю определение типа в самом WSDL.
Как мы указываем путь к внешнему xsds?
Я использую xFire 1.2.6 для генерации веб-сервисов. Клиент сгенерирован с помощью задачи Ant xFire WSGen.
Доступ к WSDL осуществляется по протоколу HTTP с любого хоста, поэтому клиент не может получить доступ ни к URL-адресу файла, ни к локальному хосту (который будет его собственным хостом, а не вашим сервером). Лучшим решением будет путь к файлу xsd:
Относительный путь:
<xsd:import namespace="http://ws.test.com/" schemaLocation="../Foo.xsd"/>
Абсолютный путь:
<xsd:import namespace="http://ws.test.com/" schemaLocation="/myapp/Foo.xsd"/>
Для абсолютного пути вам необходимо знать путь контекста вашего веб-приложения, поэтому я бы предпочел относительный путь .