Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Streaming data exception (java.io.IOException: Stream closed) with CLOB sqlType #3985

Closed
Menuka-Senevirathne opened this issue Feb 10, 2025 · 0 comments · Fixed by #4039
Closed
Labels

Comments

@Menuka-Senevirathne
Copy link

Description

The below error occurs while trying to insert data using sqlType (ie: Java Language Types) as CLOB.

[2025-02-06 11:43:12,627] ERROR {ServerWorker} - Error processing POST request for : /services/RDBMSDataService/employee org.apache.axis2.AxisFault: DS Fault Message: Error in DS non result invoke.
Nested Exception:-
javax.xml.stream.XMLStreamException: DS Fault Message: Error in 'SQLQuery.processPreNormalQuery': An error occurred while reading the value from the stream object. Error: "java.io.IOException: Stream closed"
Current Params: {Salary=15500.0, Email=[[email protected]](mailto:[email protected]), FirstName=Sam, EmployeeNumber=3, LastName=Yoyo}
Current Request Name: _postemployee
Nested Exception:-
com.microsoft.sqlserver.jdbc.SQLServerException: An error occurred while reading the value from the stream object. Error: "java.io.IOException: Stream closed"
Source Data Service:-
Name: RDBMSDataService
Location: /Users/menukasenevirathne/Documents/SupportTickets/HHKNPROD-276/wso2mi-4.1.0/tmp/carbonapps/-1234/1738822384169TestDatabaseCompositeExporter_1.0.0-SNAPSHOT.car/RDBMSDataService_1.0.0/RDBMSDataService-1.0.0.dbs
Description:
Default Namespace: http://ws.wso2.org/dataservice
DS Code: DATABASE_ERROR

DS Code: DATABASE_ERROR

at org.wso2.micro.integrator.dataservices.core.DBUtils.createAxisFault(DBUtils.java:827)
at org.wso2.micro.integrator.dataservices.core.DBInOnlyMessageReceiver.invokeBusinessLogic(DBInOnlyMessageReceiver.java:57)
at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:396)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:455)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:203)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: javax.xml.stream.XMLStreamException: DS Fault Message: Error in 'SQLQuery.processPreNormalQuery': An error occurred while reading the value from the stream object. Error: "java.io.IOException: Stream closed"
Current Params: {Salary=15500.0, Email=[[email protected]](mailto:[email protected]), FirstName=Sam, EmployeeNumber=3, LastName=Yoyo}
Current Request Name: _postemployee
Nested Exception:-
com.microsoft.sqlserver.jdbc.SQLServerException: An error occurred while reading the value from the stream object. Error: "java.io.IOException: Stream closed"
Source Data Service:-
Name: RDBMSDataService
Location: /Users/menukasenevirathne/Documents/SupportTickets/HHKNPROD-276/wso2mi-4.1.0/tmp/carbonapps/-1234/1738822384169TestDatabaseCompositeExporter_1.0.0-SNAPSHOT.car/RDBMSDataService_1.0.0/RDBMSDataService-1.0.0.dbs
Description:
Default Namespace: http://ws.wso2.org/dataservice
DS Code: DATABASE_ERROR

at org.wso2.micro.integrator.dataservices.core.engine.DSOMDataSource.execute(DSOMDataSource.java:100)
at org.wso2.micro.integrator.dataservices.core.engine.DSOMDataSource.serialize(DSOMDataSource.java:105)
at org.wso2.micro.integrator.dataservices.core.engine.DSOMDataSource.executeInOnly(DSOMDataSource.java:78)
at org.wso2.micro.integrator.dataservices.core.dispatch.SingleDataServiceRequest.processSingleRequest(SingleDataServiceRequest.java:115)
at org.wso2.micro.integrator.dataservices.core.dispatch.SingleDataServiceRequest.processRequest(SingleDataServiceRequest.java:66)
at org.wso2.micro.integrator.dataservices.core.dispatch.DataServiceRequest.dispatch(DataServiceRequest.java:368)
at org.wso2.micro.integrator.dataservices.core.DataServiceProcessor.dispatch(DataServiceProcessor.java:40)
at org.wso2.micro.integrator.dataservices.core.DBInOnlyMessageReceiver.invokeBusinessLogic(DBInOnlyMessageReceiver.java:52)
... 9 more
Caused by: DS Fault Message: Error in 'SQLQuery.processPreNormalQuery': An error occurred while reading the value from the stream object. Error: "java.io.IOException: Stream closed"
Current Params: {Salary=15500.0, Email=[[email protected]](mailto:[email protected]), FirstName=Sam, EmployeeNumber=3, LastName=Yoyo}
Current Request Name: _postemployee
Nested Exception:-
com.microsoft.sqlserver.jdbc.SQLServerException: An error occurred while reading the value from the stream object. Error: "java.io.IOException: Stream closed"
Source Data Service:-
Name: RDBMSDataService
Location: /Users/menukasenevirathne/Documents/SupportTickets/HHKNPROD-276/wso2mi-4.1.0/tmp/carbonapps/-1234/1738822384169TestDatabaseCompositeExporter_1.0.0-SNAPSHOT.car/RDBMSDataService_1.0.0/RDBMSDataService-1.0.0.dbs
Description:
Default Namespace: http://ws.wso2.org/dataservice
DS Code: DATABASE_ERROR

at org.wso2.micro.integrator.dataservices.core.description.query.SQLQuery.processPreNormalQuery(SQLQuery.java:807)
at org.wso2.micro.integrator.dataservices.core.description.query.SQLQuery.runPreQuery(SQLQuery.java:2342)
at org.wso2.micro.integrator.dataservices.core.description.query.Query.execute(Query.java:301)
at org.wso2.micro.integrator.dataservices.core.engine.CallQuery.executeElement(CallQuery.java:285)
at org.wso2.micro.integrator.dataservices.core.engine.OutputElement.execute(OutputElement.java:88)
at org.wso2.micro.integrator.dataservices.core.description.resource.Resource.execute(Resource.java:66)
at org.wso2.micro.integrator.dataservices.core.engine.DataService.invoke(DataService.java:613)
at org.wso2.micro.integrator.dataservices.core.engine.DSOMDataSource.execute(DSOMDataSource.java:94)
... 16 more
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: An error occurred while reading the value from the stream object. Error: "java.io.IOException: Stream closed"
at com.microsoft.sqlserver.jdbc.TDSWriter.error(IOBuffer.java:4415)
at com.microsoft.sqlserver.jdbc.TDSWriter.writeReader(IOBuffer.java:4353)
at com.microsoft.sqlserver.jdbc.TDSWriter.writeRPCReaderUnicode(IOBuffer.java:6636)
at com.microsoft.sqlserver.jdbc.DTV$SendByRPCOp.execute(dtv.java:1420)
at com.microsoft.sqlserver.jdbc.DTV.executeOp(dtv.java:1881)
at com.microsoft.sqlserver.jdbc.DTV.sendByRPC(dtv.java:1919)
at com.microsoft.sqlserver.jdbc.Parameter.sendByRPC(Parameter.java:1230)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.sendParamsByRPC(SQLServerPreparedStatement.java:784)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(SQLServerPreparedStatement.java:1185)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:670)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:594)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7745)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:4391)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:276)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:246)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:537)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:118)
at com.sun.proxy.$Proxy46.executeUpdate(Unknown Source)
at org.wso2.micro.integrator.dataservices.core.description.query.SQLQuery.processPreNormalQuery(SQLQuery.java:794)
... 23 more

Steps to Reproduce

Create database

CREATE TABLE Employees (
    EmployeeNumber INT NOT NULL,
    FirstName NVARCHAR(MAX) NOT NULL,  
    LastName VARCHAR(255) NULL,
    Email VARCHAR(255) NULL,
    Salary VARCHAR(255) NULL
);

Create a Data Service with below configuration.

<data enableBatchRequests="true" name="RDBMSDataService" serviceGroup="" serviceNamespace="">
    <description/>
    <query id="GetEmployeeDetails" useConfig="Datasource">
        <sql>select EmployeeNumber, FirstName, LastName, Email, Salary from Employees where EmployeeNumber=:EmployeeNumber</sql>
        <param name="EmployeeNumber" paramType="SCALAR" sqlType="STRING"/>
        <result element="Employees" rowName="Employee">
            <element column="EmployeeNumber" name="EmployeeNumber" xsdType="xs:string"/>
            <element column="FirstName" name="FirstName" xsdType="xs:string"/>
            <element column="LastName" name="LastName" xsdType="xs:string"/>
            <element column="Email" name="Email" xsdType="xs:string"/>
            <element column="Salary" name="Salary" xsdType="xs:string"/>
        </result>
    </query>

    <config id="Datasource">
    <property name="url">jdbc:sqlserver://*****:1433;databaseName=Employees;encrypt=false;</property>
    <property name="username">****</property>
    <property name="password">****</property>
    <property name="driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
  </config>
  
    <query id="AddEmployeeDetails" useConfig="Datasource">
        <sql>insert into Employees (EmployeeNumber, FirstName, LastName, Email, Salary) values(:EmployeeNumber,:FirstName,:LastName,:Email,:Salary)</sql>
        <param name="EmployeeNumber" paramType="SCALAR" sqlType="STRING"/>
        <param name="FirstName" paramType="SCALAR" sqlType="CLOB"/>
        <param name="LastName" paramType="SCALAR" sqlType="STRING"/>
        <param name="Email" paramType="SCALAR" sqlType="STRING"/>
        <param name="Salary" paramType="SCALAR" sqlType="STRING"/>
    </query>
    <resource method="GET" path="Employee/{EmployeeNumber}">
        <call-query href="GetEmployeeDetails">
            <with-param name="EmployeeNumber" query-param="EmployeeNumber"/>
        </call-query>
    </resource>
    <resource method="POST" path="Employee">
        <call-query href="AddEmployeeDetails">
            <with-param name="EmployeeNumber" query-param="EmployeeNumber"/>
            <with-param name="FirstName" query-param="FirstName"/>
            <with-param name="LastName" query-param="LastName"/>
            <with-param name="Email" query-param="Email"/>
            <with-param name="Salary" query-param="Salary"/>
        </call-query>
    </resource>

</data>

Sample Request

curl --location 'http://localhost:8290/services/RDBMSDataService/employee' \
--header 'Accept: application/xml' \
--header 'Content-Type: application/xml' \
--data-raw '<_postemployee>
    <EmployeeNumber>3</EmployeeNumber>
    <FirstName>Sam</FirstName>
    <LastName>Yoyo</LastName>
    <Email>[email protected]</Email>
    <Salary>15500.0</Salary>
</_postemployee>'

Version

4.1.0

Environment Details (with versions)

No response

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant