I get errors when testing a WSDL using soapUI while trying to load the WSDL into soapUI itself.
As a result I cant even get beyond that point. I have obscured the server names to protect the data of the customer. It appears as though there is a problem with attachment fields created on an AR form, as well as keywords used as defaults for some of the fields as defaults ($TIMESTAMP$, $DATE$ and $TIME$) when loading the WSDL into soapUI Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment01_attachmentName' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment01_attachmentData' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment01_attachmentOrigSize' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment02_attachmentName' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment02_attachmentData' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment02_attachmentOrigSize' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment03_attachmentName' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment03_attachmentData' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The value '2MBAttachment03_attachmentOrigSize' is an invalid name. Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The 'DateTime01@urn:INT_ACS_BizTalkToFFADirect' element default value '$SERVERTIMESTAMP$' is not a valid value for 'dateTime@http://www.w3.org/2001/XMLSchema' Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The 'Date01@urn:INT_ACS_BizTalkToFFADirect' element default value '$DATE$' is not a valid value for 'date@http://www.w3.org/2001/XMLSchema' Source: http://*******wsvc01/arsys/WSDL/public/*******rem01/INT_ACS_BizTalkToFFADire ct Error: The 'Time01@urn:INT_ACS_BizTalkToFFADirect' element default value '$TIME$' is not a valid value for 'time@http://www.w3.org/2001/XMLSchema' The WSDL is: <?xml version="1.0" encoding="UTF-8" ?> - <wsdl:definitions targetNamespace="urn:INT_ACS_BizTalkToFFADirect" xmlns:s 0="urn:INT_ACS_BizTalkToFFADirect"xmlns:soap="http://schemas.xmlsoap.org/wsd l/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"xmlns:wsdl ="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSch ema"> - <wsdl:types> - <xsd:schema elementFormDefault="qualified" targetNamespace="urn:INT_ACS_Bi zTalkToFFADirect"> <xsd:element name="Create_AllFields" type="s0:InputMapping1" /> - <xsd:complexType name="InputMapping1"> - <xsd:sequence> <xsd:element name="Submitter" type="xsd:string" /> <xsd:element minOccurs="0" name="Assigned_To" type="xsd:string" /> <xsd:element name="Status" type="s0:StatusType" /> <xsd:element name="Summary" type="xsd:string" /> <xsd:element minOccurs="0" name="Character01" type="xsd:string" /> <xsd:element minOccurs="0" name="Diary01" type="xsd:string" /> <xsd:element default="$SERVERTIMESTAMP$" minOccurs="0" name="DateTime01" t ype="xsd:dateTime" /> <xsd:element default="$DATE$" minOccurs="0" name="Date01" type="xsd:date" /> <xsd:element default="$TIME$" minOccurs="0" name="Time01" type="xsd:time" /> <xsd:element minOccurs="0" name="Currency01_currencyValue" type="xsd:decim al" /> <xsd:element minOccurs="0" name="Currency01_currencyCode" type="xsd:string " /> <xsd:element minOccurs="0" name="Currency01_currencyConversionDate" type=" xsd:dateTime" /> <xsd:element default="0" minOccurs="0" name="Integer01" type="xsd:int" /> <xsd:element default="0.0" minOccurs="0" name="RealNumber01" type="xsd:dou ble" /> <xsd:element default="0" minOccurs="0" name="Decimal01" type="xsd:decimal" /> <xsd:element default="Club" minOccurs="0" name="Drop-List01" nillable="tru e" type="s0:Drop-List01Type" /> <xsd:element default="Yes" minOccurs="0" name="RadioButton01" nillable="tr ue" type="s0:RadioButton01Type" /> <xsd:element default="Approved" minOccurs="0" name="CheckBox01" nillable=" true" type="s0:CheckBox01Type" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentOrigSize" type= "xsd:int" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentOrigSize" type= "xsd:int" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentOrigSize" type= "xsd:int" /> </xsd:sequence> </xsd:complexType> - <xsd:simpleType name="StatusType"> - <xsd:restriction base="xsd:string"> <xsd:enumeration value="New" /> <xsd:enumeration value="Assigned" /> <xsd:enumeration value="Fixed" /> <xsd:enumeration value="Rejected" /> <xsd:enumeration value="Closed" /> </xsd:restriction> </xsd:simpleType> - <xsd:simpleType name="Drop-List01Type"> - <xsd:restriction base="xsd:string"> <xsd:enumeration value="Diamond" /> <xsd:enumeration value="Platinum" /> <xsd:enumeration value="Gold" /> <xsd:enumeration value="Silver" /> <xsd:enumeration value="Bronze" /> <xsd:enumeration value="Copper" /> <xsd:enumeration value="Club" /> </xsd:restriction> </xsd:simpleType> - <xsd:simpleType name="RadioButton01Type"> - <xsd:restriction base="xsd:string"> <xsd:enumeration value="Yes" /> <xsd:enumeration value="No" /> <xsd:enumeration value="Maybe" /> </xsd:restriction> </xsd:simpleType> - <xsd:simpleType name="CheckBox01Type"> - <xsd:restriction base="xsd:string"> <xsd:enumeration value="Approved" /> </xsd:restriction> </xsd:simpleType> <xsd:element name="Create_AllFieldsResponse" type="s0:OutputMapping1" /> - <xsd:complexType name="OutputMapping1"> - <xsd:sequence> <xsd:element name="Request_ID" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:element name="Get_RqstID" type="s0:InputMapping2" /> - <xsd:complexType name="InputMapping2"> - <xsd:sequence> <xsd:element name="Request_ID" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:element name="Get_RqstIDResponse" type="s0:OutputMapping2" /> - <xsd:complexType name="OutputMapping2"> - <xsd:sequence> <xsd:element name="Request_ID" type="xsd:string" /> <xsd:element name="Submitter" type="xsd:string" /> <xsd:element minOccurs="0" name="Create_Date" type="xsd:dateTime" /> <xsd:element minOccurs="0" name="Assigned_To" type="xsd:string" /> <xsd:element minOccurs="0" name="Modified_By" type="xsd:string" /> <xsd:element minOccurs="0" name="Modified_Date" type="xsd:dateTime" /> <xsd:element name="Status" type="s0:StatusType" /> <xsd:element minOccurs="0" name="Status_History" type="xsd:string" /> <xsd:element name="Summary" type="xsd:string" /> <xsd:element minOccurs="0" name="Character01" type="xsd:string" /> <xsd:element minOccurs="0" name="Diary01" type="xsd:string" /> <xsd:element default="$SERVERTIMESTAMP$" minOccurs="0" name="DateTime01" t ype="xsd:dateTime" /> <xsd:element default="$DATE$" minOccurs="0" name="Date01" type="xsd:date" /> <xsd:element default="$TIME$" minOccurs="0" name="Time01" type="xsd:time" /> <xsd:element minOccurs="0" name="Currency01_currencyValue" type="xsd:decim al" /> <xsd:element minOccurs="0" name="Currency01_currencyCode" type="xsd:string " /> <xsd:element minOccurs="0" name="Currency01_currencyConversionDate" type=" xsd:dateTime" /> <xsd:element default="0" minOccurs="0" name="Integer01" type="xsd:int" /> <xsd:element default="0.0" minOccurs="0" name="RealNumber01" type="xsd:dou ble" /> <xsd:element default="0" minOccurs="0" name="Decimal01" type="xsd:decimal" /> <xsd:element default="Club" minOccurs="0" name="Drop-List01" nillable="tru e" type="s0:Drop-List01Type" /> <xsd:element default="Yes" minOccurs="0" name="RadioButton01" nillable="tr ue" type="s0:RadioButton01Type" /> <xsd:element default="Approved" minOccurs="0" name="CheckBox01" nillable=" true" type="s0:CheckBox01Type" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentOrigSize" type= "xsd:int" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentOrigSize" type= "xsd:int" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentOrigSize" type= "xsd:int" /> </xsd:sequence> </xsd:complexType> <xsd:element name="GetList_StatusAndChar01" type="s0:InputMapping3" /> - <xsd:complexType name="InputMapping3"> - <xsd:sequence> <xsd:element name="Qualification" type="xsd:string" /> <xsd:element name="startRecord" type="xsd:string" /> <xsd:element name="maxLimit" type="xsd:string" /> <xsd:element name="Status" type="xsd:string" /> <xsd:element name="Character01" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:element name="GetList_StatusAndChar01Response" type="s0:OutputMapping 3" /> - <xsd:complexType name="OutputMapping3"> - <xsd:sequence> - <xsd:element maxOccurs="unbounded" name="getListValues"> - <xsd:complexType> - <xsd:sequence> <xsd:element minOccurs="0" name="Request_ID" type="xsd:string" /> <xsd:element name="Submitter" type="xsd:string" /> <xsd:element minOccurs="0" name="Create_Date" type="xsd:dateTime" /> <xsd:element minOccurs="0" name="Assigned_To" type="xsd:string" /> <xsd:element minOccurs="0" name="Modified_By" type="xsd:string" /> <xsd:element minOccurs="0" name="Modified_Date" type="xsd:dateTime" /> <xsd:element name="Status" type="s0:StatusType" /> <xsd:element minOccurs="0" name="Status_History" type="xsd:string" /> <xsd:element name="Summary" type="xsd:string" /> <xsd:element minOccurs="0" name="Character01" type="xsd:string" /> <xsd:element minOccurs="0" name="Diary01" type="xsd:string" /> <xsd:element default="$SERVERTIMESTAMP$" minOccurs="0" name="DateTime01" t ype="xsd:dateTime" /> <xsd:element default="$DATE$" minOccurs="0" name="Date01" type="xsd:date" /> <xsd:element default="$TIME$" minOccurs="0" name="Time01" type="xsd:time" /> <xsd:element minOccurs="0" name="Currency01_currencyValue" type="xsd:decim al" /> <xsd:element minOccurs="0" name="Currency01_currencyCode" type="xsd:string " /> <xsd:element minOccurs="0" name="Currency01_currencyConversionDate" type=" xsd:dateTime" /> <xsd:element default="0" minOccurs="0" name="Integer01" type="xsd:int" /> <xsd:element default="0.0" minOccurs="0" name="RealNumber01" type="xsd:dou ble" /> <xsd:element default="0" minOccurs="0" name="Decimal01" type="xsd:decimal" /> <xsd:element default="Club" minOccurs="0" name="Drop-List01" nillable="tru e" type="s0:Drop-List01Type" /> <xsd:element default="Yes" minOccurs="0" name="RadioButton01" nillable="tr ue" type="s0:RadioButton01Type" /> <xsd:element default="Approved" minOccurs="0" name="CheckBox01" nillable=" true" type="s0:CheckBox01Type" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentOrigSize" type= "xsd:int" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentOrigSize" type= "xsd:int" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentOrigSize" type= "xsd:int" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> <xsd:element name="Set_AllEntriesAllFields" type="s0:InputMapping4" /> - <xsd:complexType name="InputMapping4"> - <xsd:sequence> <xsd:element default="$USER$" minOccurs="0" name="Submitter" type="xsd:str ing" /> <xsd:element minOccurs="0" name="Assigned_To" type="xsd:string" /> <xsd:element default="New" minOccurs="0" name="Status" nillable="true" typ e="s0:StatusType" /> <xsd:element default="- None -" minOccurs="0" name="Summary" type="xsd:string" /> <xsd:element minOccurs="0" name="Character01" type="xsd:string" /> <xsd:element minOccurs="0" name="Diary01" type="xsd:string" /> <xsd:element default="$SERVERTIMESTAMP$" minOccurs="0" name="DateTime01" t ype="xsd:dateTime" /> <xsd:element default="$DATE$" minOccurs="0" name="Date01" type="xsd:date" /> <xsd:element default="$TIME$" minOccurs="0" name="Time01" type="xsd:time" /> <xsd:element minOccurs="0" name="Currency01_currencyValue" type="xsd:decim al" /> <xsd:element minOccurs="0" name="Currency01_currencyCode" type="xsd:string " /> <xsd:element minOccurs="0" name="Currency01_currencyConversionDate" type=" xsd:dateTime" /> <xsd:element default="0" minOccurs="0" name="Integer01" type="xsd:int" /> <xsd:element default="0.0" minOccurs="0" name="RealNumber01" type="xsd:dou ble" /> <xsd:element default="0" minOccurs="0" name="Decimal01" type="xsd:decimal" /> <xsd:element default="Club" minOccurs="0" name="Drop-List01" nillable="tru e" type="s0:Drop-List01Type" /> <xsd:element default="Yes" minOccurs="0" name="RadioButton01" nillable="tr ue" type="s0:RadioButton01Type" /> <xsd:element default="Approved" minOccurs="0" name="CheckBox01" nillable=" true" type="s0:CheckBox01Type" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment01_attachmentOrigSize" type= "xsd:int" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment02_attachmentOrigSize" type= "xsd:int" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentName" type="xsd :string" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentData" type="xsd :base64Binary" /> <xsd:element minOccurs="0" name="2MBAttachment03_attachmentOrigSize" type= "xsd:int" /> <xsd:element name="Request_ID" type="xsd:string" /> <xsd:element minOccurs="0" name="searchStatus" nillable="true" type="s0:St atusType" /> </xsd:sequence> </xsd:complexType> <xsd:element name="Set_AllEntriesAllFieldsResponse" type="s0:OutputMapping 4" /> - <xsd:complexType name="OutputMapping4"> - <xsd:sequence> <xsd:element name="Request_ID" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:element name="AuthenticationInfo" type="s0:AuthenticationInfo" /> - <xsd:complexType name="AuthenticationInfo"> - <xsd:sequence> <xsd:element name="userName" type="xsd:string" /> <xsd:element name="password" type="xsd:string" /> <xsd:element minOccurs="0" name="authentication" type="xsd:string" /> <xsd:element minOccurs="0" name="locale" type="xsd:string" /> <xsd:element minOccurs="0" name="timeZone" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema> </wsdl:types> - <wsdl:message name="Create_AllFieldsSoapIn"> <wsdl:part element="s0:Create_AllFields" name="parameters" /> </wsdl:message> - <wsdl:message name="Get_RqstIDSoapIn"> <wsdl:part element="s0:Get_RqstID" name="parameters" /> </wsdl:message> - <wsdl:message name="ARAuthenticate"> <wsdl:part element="s0:AuthenticationInfo" name="parameters" /> </wsdl:message> - <wsdl:message name="Set_AllEntriesAllFieldsSoapOut"> <wsdl:part element="s0:Set_AllEntriesAllFieldsResponse" name="parameters" /> </wsdl:message> - <wsdl:message name="Set_AllEntriesAllFieldsSoapIn"> <wsdl:part element="s0:Set_AllEntriesAllFields" name="parameters" /> </wsdl:message> - <wsdl:message name="GetList_StatusAndChar01SoapOut"> <wsdl:part element="s0:GetList_StatusAndChar01Response" name="parameters" /> </wsdl:message> - <wsdl:message name="Get_RqstIDSoapOut"> <wsdl:part element="s0:Get_RqstIDResponse" name="parameters" /> </wsdl:message> - <wsdl:message name="GetList_StatusAndChar01SoapIn"> <wsdl:part element="s0:GetList_StatusAndChar01" name="parameters" /> </wsdl:message> - <wsdl:message name="Create_AllFieldsSoapOut"> <wsdl:part element="s0:Create_AllFieldsResponse" name="parameters" /> </wsdl:message> - <wsdl:portType name="New_Port_0PortType"> - <wsdl:operation name="Create_AllFields"> <wsdl:input message="s0:Create_AllFieldsSoapIn" /> <wsdl:output message="s0:Create_AllFieldsSoapOut" /> </wsdl:operation> - <wsdl:operation name="Get_RqstID"> <wsdl:input message="s0:Get_RqstIDSoapIn" /> <wsdl:output message="s0:Get_RqstIDSoapOut" /> </wsdl:operation> - <wsdl:operation name="GetList_StatusAndChar01"> <wsdl:input message="s0:GetList_StatusAndChar01SoapIn" /> <wsdl:output message="s0:GetList_StatusAndChar01SoapOut" /> </wsdl:operation> - <wsdl:operation name="Set_AllEntriesAllFields"> <wsdl:input message="s0:Set_AllEntriesAllFieldsSoapIn" /> <wsdl:output message="s0:Set_AllEntriesAllFieldsSoapOut" /> </wsdl:operation> </wsdl:portType> - <wsdl:binding name="New_Port_0SoapBinding" type="s0:New_Port_0PortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/ http" /> - <wsdl:operation name="Create_AllFields"> <soap:operation soapAction="urn:INT_ACS_BizTalkToFFADirect/Create_AllField s" style="document" /> - <wsdl:input> <soap:header message="s0:ARAuthenticate" part="parameters" use="literal" / > <soap:body use="literal" /> </wsdl:input> - <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> - <wsdl:operation name="Get_RqstID"> <soap:operation soapAction="urn:INT_ACS_BizTalkToFFADirect/Get_RqstID" sty le="document" /> - <wsdl:input> <soap:header message="s0:ARAuthenticate" part="parameters" use="literal" / > <soap:body use="literal" /> </wsdl:input> - <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> - <wsdl:operation name="GetList_StatusAndChar01"> <soap:operation soapAction="urn:INT_ACS_BizTalkToFFADirect/GetList_StatusA ndChar01" style="document" /> - <wsdl:input> <soap:header message="s0:ARAuthenticate" part="parameters" use="literal" / > <soap:body use="literal" /> </wsdl:input> - <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> - <wsdl:operation name="Set_AllEntriesAllFields"> <soap:operation soapAction="urn:INT_ACS_BizTalkToFFADirect/Set_AllEntriesA llFields" style="document" /> - <wsdl:input> <soap:header message="s0:ARAuthenticate" part="parameters" use="literal" / > <soap:body use="literal" /> </wsdl:input> - <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:service name="INT_ACS_BizTalkToFFADirectService"> - <wsdl:port binding="s0:New_Port_0SoapBinding" name="New_Port_0Soap"> <soap:address location="http://*******wsvc01/arsys/services/ARService?serv er=*******rem01&webService=INT_ACS_BizTalkToFFADirect" /> </wsdl:port> </wsdl:service> </wsdl:definitions> The WSDL loads fine into another diagnostic tool, called Actional Diagnostics, but cant get it working on it after that as I am not too familiar with Actional Diagnostics so I might possibly be doing something wrong there. Im also not trying to eliminate a possible problem with the WSDL. It is a web service created from a test form which will later be used towards an integration. I was attempting to create a POC (proof of concept) that I could get BizTalk and Remedy talking to each other using WS. At the moment I cannot get into the troubleshooting of why its not working with Actional Diagnostics after it successfully loads the WSDL, as I do not have access to the server to check out the arjavaplugin logs I have requested for access and yet to get it. So Ill leave that for later. Meanwhile Id like to know what may be the possible issues why soapUI doesnt like my WSDL.. Has anyone run into a similar issue? Joe _______________________________________________________________________________ UNSUBSCRIBE or access ARSlist Archives at www.arslist.org "Where the Answers Are, and have been for 20 years"