В настоящее время я создаю проект для написания клиента и сервиса, которые предоставляют информацию из базы данных musi c.
Я создал MusicService. java файл, который развертывается нормально. Однако я не уверен, что код правильный. Затем мне нужно было создать клиента. Когда я запускаю клиент, я продолжаю получать сообщения об ошибках, возникающие из-за попытки перехвата в моем MusicService. Класс java, говорящий («Невозможно найти composer») или («Невозможно найти дис c») c отладка, я знаю, что методы try в getBy Composer и getByDis c никогда не вводятся и идут прямо к улову.
Я также знаю в своем клиенте. java метод, что вводится попытка из-за того, что мой оператор печати возвращается в консоли. Однако код никогда не выполняется и сразу переходит к исключению catch, и я не могу понять, почему.
Я знаю, что где-то есть ошибка, возможно, я не звоню, но я потратил часы на это и, похоже, не могу найти проблему.
Я оставлю 2 метода внизу, если кто-нибудь сможет помочь, это будет с благодарностью.
MusicService. java метод
package music;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MusicService extends MusicServiceSkeleton {
private final static String databaseHost = "mysql0.cs.stir.ac.uk";
private final static String databaseName = "CSCU9YW";
private final static String databasePassword = "rtk1";
private final static String databaseUser = "rtk1";
private final static String discTable = "music";
//define methods to implement the WSDL opeartions getByComposer() and getByDisc()
public music.MultipleTracks getByComposer(music.Composer composer)throws ErrorFault
{
try {
TrackDetail[]info=getByField("composer",composer.getComposer());
MultipleTracks multiTrack = new MultipleTracks();
TrackDetails multiRetrieve = new TrackDetails();
multiRetrieve.setTracklist(info);
multiTrack.setMultipleTracks(multiRetrieve);
return multiTrack;
}
catch(Exception e)
{
throw(new ErrorFault("Unable to find composer"));
}
}
public music.MultipleTracks getByDisc(music.Disc disc)throws ErrorFault
{
try {
System.out.println("hello in getbbydisc");
TrackDetail[]info=getByField("disc",disc.getDisc());
MultipleTracks multiTrack = new MultipleTracks();
TrackDetails multiRetrieve = new TrackDetails();
multiRetrieve.setTracklist(info);
multiTrack.setMultipleTracks(multiRetrieve);
return multiTrack;
}
catch(Exception e)
{
throw(new ErrorFault("Unable to find disc"));
}
}
private TrackDetail[] getByField(String field, String value) throws ErrorFault {
try {
if (value.length() == 0)
throw (new Exception(field + " is empty"));
Class.forName("com.mysql.jdbc.Driver").newInstance();
String databaseDesignation = "jdbc:mysql://" + databaseHost + "/" + databaseName + "?user=" + databaseUser
+ "&password=" + databasePassword;
Connection connection = DriverManager.getConnection(databaseDesignation);
Statement statement = connection.createStatement();
String query = "SELECT disc, track, composer, work, title " + "FROM " + discTable + " " + "WHERE " + field
+ " LIKE '%" + value + "%'";
ResultSet result = statement.executeQuery(query);
result.last();
int resultCount = result.getRow();
if (resultCount == 0)
throw (new Exception(field + " '" + value + "' not found"));
TrackDetail[] trackDetails = new TrackDetail[resultCount];
result.beforeFirst();
int resultIndex = 0;
while (result.next()) {
TrackDetail receiver = detailsReceived(result);
trackDetails[resultIndex++]= receiver;
}
connection.close();
return (trackDetails);
} catch (Exception exception) {
String errorMessage = "database access error - " + exception.getMessage();
throw (new ErrorFault(errorMessage, exception));
}
}
private TrackDetail detailsReceived(ResultSet current)throws SQLException
{
TrackDetail details = new TrackDetail();
details.setDiscNumber(current.getString(1));
details.setTrackNumber(current.getString(2));
details.setComposerName(current.getString(3));
details.setWorkName(current.getString(4));
details.setTitleName(current.getString(5));
return details;
}
}
Клиент. java метод
package music;
import music.MusicServiceStub.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Client extends JFrame implements ActionListener {
private final static int contentInset = 5;
private final static int trackColumns = 130;
private final static int trackRows = 20;
private final static int gridLeft = GridBagConstraints.WEST;
private final static String programTitle = "Music Album";
private GridBagConstraints contentConstraints = new GridBagConstraints();
private GridBagLayout contentLayout = new GridBagLayout();
private Container contentPane = getContentPane();
private JButton discButton = new JButton("Check");
private JLabel discLabel = new JLabel("Disc Number:");
private JTextField discText = new JTextField(5);
private JButton nameButton = new JButton("Check");
private JLabel nameLabel = new JLabel("Composer/Artiste Name:");
private JTextField nameText = new JTextField(16);
private Font trackFont = new Font(Font.MONOSPACED, Font.PLAIN, 12);
private JLabel trackLabel = new JLabel("Tracks:");
private JTextArea trackArea = new JTextArea(trackRows, trackColumns);
private JScrollPane trackScroller = new JScrollPane(trackArea);
private MultipleTracks tracks;
// define here private variable for your Client Stub
public Client() throws Exception {
contentPane.setLayout(contentLayout);
addComponent(0, 0, gridLeft, nameLabel);
addComponent(1, 0, gridLeft, nameText);
addComponent(2, 0, gridLeft, nameButton);
addComponent(0, 1, gridLeft, discLabel);
addComponent(1, 1, gridLeft, discText);
addComponent(2, 1, gridLeft, discButton);
addComponent(0, 2, gridLeft, trackLabel);
addComponent(0, 3, gridLeft, trackScroller);
nameButton.addActionListener(this);
discButton.addActionListener(this);
trackArea.setFont(trackFont);
trackArea.setEditable(false);
// instantiate your Client Stub and assign to private class variable declared above
}
public static void main(String[] args) throws Exception {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
Client window = new Client();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setTitle(programTitle);
window.pack();
int windowWidth = window.getWidth();
int windowHeight = window.getHeight();
int windowX = (screenWidth - windowWidth) / 2;
int windowY = (screenHeight - windowHeight) / 2;
window.setLocation(windowX, windowY);
window.setVisible(true);
}
private void addComponent(int x, int y, int position, JComponent component) {
Insets contentInsets = new Insets(contentInset, contentInset, contentInset, contentInset);
contentConstraints.gridx = x;
contentConstraints.gridy = y;
contentConstraints.anchor = position;
contentConstraints.insets = contentInsets;
if (component == trackArea || component == trackLabel)
contentConstraints.gridwidth = GridBagConstraints.REMAINDER;
contentLayout.setConstraints(component, contentConstraints);
contentPane.add(component);
}
public void actionPerformed(ActionEvent event) {
String trackRows = "";
TrackDetail[] tracks;
try {
//System.out.println("Hello");
if (event.getSource() == nameButton)
tracks = getField("composer", nameText.getText());
else if (event.getSource() == discButton)
tracks = getField("disc", discText.getText());
else
return;
trackRows += String.format("%4s %5s %-32s %-40s %-40s\n", "Disc", "Track", "Composer/Artist", "Work", "Title");
for (int i = 0; i < tracks.length; i++) {
TrackDetail trackDetail = tracks[i];
trackRows += extractMusicData(trackDetail);
// extract the data for a track and append to trackRows variable
}
} catch (Exception exception) {
String error = exception.getMessage();
if (error == null) error = exception.toString();
error = "could not get track - " + error;
trackRows += error;
}
trackArea.setText(trackRows);
}
private String extractMusicData(TrackDetail track )
{
String albumName= track.getWorkName();
String composer = track.getComposerName();
String title= track.getTitleName();
String trackNo= track.getTrackNumber().toString();
String discNo= track.getDiscNumber().toString();
String extractMusicTracks= String.format("%4s %5s %-32s %-40s %-40s\n", discNo, trackNo, composer, albumName, title);
return extractMusicTracks;
}
private TrackDetail[] getField(String field, String value) throws Exception {
// define behaviour for method getField() to call the web service methods and receive the results
try
{
TrackDetail[] multiTrack;
MusicServiceStub stub=new MusicServiceStub();
if(field.equals("disc"))
{
MusicServiceStub.Disc requestDisc = new MusicServiceStub.Disc();
requestDisc.setDisc(value);
MusicServiceStub.MultipleTracks message= stub.getByDisc(requestDisc);
multiTrack= extractedTracks(message);
return multiTrack;
} else if(field.equals("composer"));
{
MusicServiceStub.Composer requestComposer = new MusicServiceStub.Composer();
requestComposer.setComposer(value);
MusicServiceStub.MultipleTracks message= stub.getByComposer(requestComposer);
multiTrack= extractedTracks(message);
return multiTrack;
}
} catch(Exception e)
{
System.out.println(e);
}
return null;
}
private TrackDetail[] extractedTracks(MultipleTracks tracks)
{
TrackDetails track= tracks.getMultipleTracks();
TrackDetail[] multiTrack= track.getTracklist();
return multiTrack;
}
}