使用PHP5.x上的SoapClient类并对付其方法中具有可选参数的SOAP Web服务,如果使用非wsdl模式,则不会有任何问题.
但是,至少在默认情况下,使用wsdl模式,如果你没有填充所有参数,你将收到如下错误:SOAP-ERROR:Encoding:object没有'xxx'属性
如果不使用非wsdl模式并且没有填充所有参数,有没有办法避免该错误?
您好
我们使用WCF服务开发了Web服务,并使用IIS 5.1托管在Windows 2003服务器计算机上.WCF托管在basicHttpBinding上.
当尝试访问服务"*.svc?wsdl"的 wsdl时,它生成错误的wsdl,即wsdl不能用于java和php客户端.
当我检查wsdl时
<wsdl:import namespace="xxxxx" location="http://machine name/xxx/xxx.svc?wsdl=wsdl0"/>
<soap:address location="http://machine name/xcxx/xxx.svc" />
Run Code Online (Sandbox Code Playgroud)
如何删除机器并将其替换为我的网站网址?
如何生成ASMX Web服务将生成的完整WSDL文档?
是否有关于如何处理SOAP Web服务演变的指南/教程?
我可以看到更改现有方法或类型可能不起作用,但我可以添加新方法,复杂类型,枚举值而不破坏现有客户端吗?
是否存在使用服务端点地址获取服务WSDL的通用方法.我知道这可以通过将?wsdl附加到Axis2服务来完成.但是这个属性是否适用于其他Web服务容器?
我正在尝试使用ruby和Savon来使用Web服务.
测试服务是http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2
require 'rubygems' require 'savon' client = Savon::Client.new "http://www.webservicex.net/stockquote.asmx?WSDL" client.get_quote do |soap| soap.body = {:symbol => "AAPL"} end
返回SOAP异常.检查soap信封,它在我看来soap请求没有正确的命名空间.
任何人都可以建议我可以做些什么来使这项工作?我也遇到与其他Web服务端点相同的问题.
谢谢,
我有一个相当标准的WCF服务(在IIS7上托管),在查询时生成一个相当标准的WSDL ?wsdl
:
<wsdl:definitions>
<!-- ... -->
<wsdl:service>
<wsdl:port>
<soap:address location="https://machine/virtual_dir/servicename.svc"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Run Code Online (Sandbox Code Playgroud)
(省略无聊的位)
我正在以一种快速的方式将生成的WSDL中给出的地址更改为完全不同的地址,例如:
https://othermachine/other_dir/other_service.svc
Run Code Online (Sandbox Code Playgroud)
这样做最简单的方法是什么?
我有一个API调用.该调用返回XML,我将XML转换为数组,然后使用json_encode在jsonp调用中发回响应.我正在做的是工作,但API不允许我按状态过滤,按开始和结束时间过滤,并确保房间可用.
几个jsponp调用让它变得疯狂.再一次,我所拥有的是工作,但我需要找到一种方法来再次使用我的结果过滤.我已经返回了正确的状态和正确的日期,但我仍然需要过滤掉时间.如果时间目前是上午10点29分,我不想显示从上午10点半开始预订的房间,因为直到上午10点半才开始预订.因此,如果我当前的时间是上午10:29,我需要过滤我的数组中的事件,并且只显示具有当前时间的开始和结束时间的事件.
从上午10点到11点的预订应该留在我的阵列中,但是从下午2-4点开始的预订不应该出现在我的阵列中.正如我所说,数组首先是一个返回的XML文档,然后是一个数组,然后是JSON,所以在技术上我可以使用任何工作来过滤.PHP以XML格式过滤,PHP过滤数组.甚至Javascript也可以通过我的ajax调用来准备PHP文件.
在我将其转换为JSON并返回之前,这是我的数组.我过滤的时间应该是TimeEventStart和TimeEventEnd.我可以使用当前的Javascript时间或PHP日期函数时间.我可以过滤数组或使用类似XMLPath的东西进行过滤.不确定什么是最有效的,最好的.
$axml = Array{
"Bookings":{
"Data":[
{
"BookingDate":[
"2014-05-09T00:00:00"
],
"RoomDescription":[
"Room06"
],
"TimeEventStart":[
"2014-05-09T14:00:00"
],
"TimeEventEnd":[
"2014-05-09T14:30:00"
],
"EventName":[
"Jake Long"
],
"SetupTypeDescription":[
"(none)"
],
"ReservationID":[
"137"
],
"OpenTime":[
"1900-01-01T00:00:00"
],
"CloseTime":[
"1900-01-01T00:00:00"
],
"EventTypeDescription":[
[
]
],
"BookingID":[
"709"
],
"TimeBookingStart":[
"2014-05-09T14:00:00"
],
"TimeBookingEnd":[
"2014-05-09T14:30:00"
],
"GMTStartTime":[
"2014-05-09T18:00:00"
],
"GMTEndTime":[
"2014-05-09T18:30:00"
],
"TimeZone":[
"ET"
],
"RoomCode":[
"R06"
],
"Room":[
"Room 6"
],
"RoomID":[
"34"
],
"StatusID":[
"3"
],
"EventTypeID":[
"0"
],
"DateAdded":[
"2014-05-09T13:47:29.087"
],
"DateChanged":[ …
Run Code Online (Sandbox Code Playgroud) 如何修改从多个wsdls生成的java类的包名称.我有两个wsdls,它们都生成类ObjectFactory,package-info等类,具有完全相同的包名.因此,我无法在我的代码中组织导入.对于wsdls,我的包看起来像这样 -
WSDL A
com.test.customerinfo.dto
com.test.customerinfo.exceptions
com.test.customerinfo.service
WSDL B
com.test.customerinfo.dto
com.test.customerinfo.exceptions
com.test.customerinfo.service
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样 -
WSDL A
com.test.customerinfo.dto
com.test.customerinfo.exceptions
com.test.customerinfo.service
WSDL B
com.testOne.customerinfo.dto
com.testOne.customerinfo.exceptions
com.testOne.customerinfo.service
Run Code Online (Sandbox Code Playgroud)
我试过这个,但它没有用 -
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.7.7</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>target/generated-sources/test/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>src/main/resources/wsdl/test/GetInfo.wsdl</wsdl>
<extraargs>
<extraarg>-server</extraarg>
<extraarg>-client</extraarg>
<extraarg>-impl</extraarg>
<extraarg>-verbose</extraarg>
<extraarg>-p</extraarg>
<extraarg>http://dto.customerinfo.test.com/=com.test.customerinfo.dto</extraarg>
<extraarg>-p</extraarg>
<extraarg>http://services.customerinfo.test.com/=com.test.customerinfo.services</extraarg>
<extraarg>-p</extraarg>
<extraarg>http://exceptions.customerinfo.test.com/=com.test.customerinfo.exceptions</extraarg>
</extraargs>
<frontEnd>jaxws21</frontEnd>
<faultSerialVersionUID>1</faultSerialVersionUID>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
请指教.
在webservice上查看WDSL.xml声明数据类型是一个整数,但是,在调用web方法时,该方法需要一个字符串,WDSL代码如下
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType:="integer", Order:=0)> _
Public Property ID() As String
Get
Return Me.ID
End Get
Set(value As String)
Me.ID= value
End Set
End Property
Run Code Online (Sandbox Code Playgroud)
它是否正确?我很困惑,为什么它需要传递一个字符串,如果序列化说的是整数类型?
我的经验告诉我,在他们这边,即服务器,他们会将字符串转换为整数?正确?
谢谢
我有一个WSDL文件,其中还包含其中使用的所有类型(通过<wsdl:types>
标记).在定义类型时,我有这样的事情:
<wsdl:definitions name="service"
targetNamespace="http://www.xxx.yyy/reg/definitions" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tax="http://www.xxx.yyy/reg/definitions" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
.............
<xs:complexType name="CompanyName">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="ShortName" type="xs:string" minOccurs="0" />
</xs:sequence>
<xs:attribute name="Language" type="tax:LanguageType" use="required"/>
<xs:assert test="ShortName or @Language != 'Language1'"/>
</xs:complexType>
.............
</wsdl:definitions>
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试在Tomcat上启动应用程序时,它无法提供以下异常:
javax.xml.ws.WebServiceException: org.xml.sax.SAXParseException; s4s-elt-invalid-content.1: The content of 'CompanyName' is invalid. Element 'assert' is invalid, misplaced, or occurs too often.
Run Code Online (Sandbox Code Playgroud)
WSDL版本是1.2,我不知道在其中描述类型时它使用哪个版本的xsd,所以我不知道它是xsd版本(1.0对1.1)问题还是别的.
有人可以帮助我找到真正的问题吗?
编辑:我添加了wsdl的标题.我已将version attribute(version="1.1"
)添加到<xs:schema>
定义中,但这也没有帮助:
<xs:schema targetNamespace="http://www.xxx.yyy/reg/definitions" elementFormDefault="qualified" version="1.1">
Run Code Online (Sandbox Code Playgroud)