Commit a6dab807 by Patryk Czarnik

moduł soap_klient za pomocą interfejsu SEI

parent 4c937405
...@@ -12,8 +12,9 @@ import sklep.model.Customer; ...@@ -12,8 +12,9 @@ import sklep.model.Customer;
import sklep.model.Order; import sklep.model.Order;
import sklep.model.Product; import sklep.model.Product;
@WebService @WebService(name="Sklep", targetNamespace=Sklep.NAMESPACE)
public interface Sklep { public interface Sklep {
static final String NAMESPACE = "http://sklep.alx.pl/";
@WebResult(name="product") @WebResult(name="product")
public List<Product> readAll() throws DBException; public List<Product> readAll() throws DBException;
......
...@@ -15,5 +15,12 @@ ...@@ -15,5 +15,12 @@
<artifactId>wielomodulowy-soap_api</artifactId> <artifactId>wielomodulowy-soap_api</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>4.0.1</version>
<scope>runtime</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>
package sklep.klient;
import java.util.List;
import sklep.db.DBException;
import sklep.model.Product;
import sklep.soap.Sklep;
public class Klient1_WszystkieProdukty {
public static void main(String[] args) {
System.out.println("Startujemy");
SklepService service = new SklepService();
Sklep sklep = service.getSklepPort();
System.out.println("Mam obiekt proxy: " + sklep);
try {
List<Product> produkty = sklep.readAll();
System.out.println("Odczytano " + produkty.size() + " produktów:");
for (Product product : produkty) {
System.out.println(product.getProductName() + " za cenę " + product.getPrice());
}
} catch (DBException e) {
e.printStackTrace();
}
System.out.println("Koniec");
}
}
package sklep.klient;
import java.util.Scanner;
import sklep.db.DBException;
import sklep.db.RecordNotFound;
import sklep.model.Product;
import sklep.soap.Sklep;
public class Klient2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
SklepService service = new SklepService();
Sklep sklep = service.getSklepPort();
while(true) {
System.out.println("Podaj ID produktu lub 0, aby zakończyć");
int id = scanner.nextInt();
if(id == 0) break;
try {
Product product = sklep.readOne(id);
System.out.println("Znaleziono produkt: " + product.getProductName() + " za cenę " + product.getPrice());
if(product.getDescription() != null) {
System.out.println("Opis: " + product.getDescription());
}
} catch (RecordNotFound e) {
System.out.println("Nie ma takiego rekordu");
} catch (DBException e) {
System.out.println("Inny błąd: " + e);
e.printStackTrace();
}
}
}
}
package sklep.klient;
import java.math.BigDecimal;
import java.util.Locale;
import java.util.Scanner;
import sklep.db.DBException;
import sklep.db.RecordNotFound;
import sklep.model.Product;
import sklep.soap.Sklep;
public class Klient3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
scanner.useLocale(Locale.US);
SklepService service = new SklepService();
Sklep sklep = service.getSklepPort();
while(true) {
System.out.println("Podaj ID produktu lub 0, aby zakończyć");
int id = scanner.nextInt();
if(id == 0) break;
try {
Product product = sklep.readOne(id);
System.out.println("Znaleziono produkt: " + product.getProductName() + " za cenę " + product.getPrice());
if(product.getDescription() != null) {
System.out.println("Opis: " + product.getDescription());
}
boolean czyCosSieZmienilo = false;
System.out.println("Podaj zmianę ceny: ");
BigDecimal zmiana = scanner.nextBigDecimal();
if(zmiana.compareTo(BigDecimal.ZERO) != 0) {
product.setPrice(product.getPrice().add(zmiana));
czyCosSieZmienilo = true;
}
scanner.nextLine();
System.out.println("Podaj nową nazwę (enter, aby nie zmieniać): ");
String nazwa = scanner.nextLine();
if(!nazwa.isEmpty()) {
product.setProductName(nazwa);
czyCosSieZmienilo = true;
}
System.out.println("Podaj nowy opis (enter, aby nie zmieniać): ");
String opis = scanner.nextLine();
if(!opis.isEmpty()) {
product.setDescription(opis);
czyCosSieZmienilo = true;
}
if(czyCosSieZmienilo) {
sklep.saveProduct(product);
System.out.println("Zapisano zmiany");
}
System.out.println();
} catch (RecordNotFound e) {
System.out.println("Nie ma takiego rekordu");
} catch (DBException e) {
System.out.println("Inny błąd: " + e);
e.printStackTrace();
}
}
}
}
package sklep.klient;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingWorker;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import sklep.db.DBException;
import sklep.db.RecordNotFound;
import sklep.model.Product;
import sklep.soap.Sklep;
public class OknoSoap {
private Sklep proxy;
private JFrame frame;
private JTextField txtTytul;
private JTextField txtMarka;
private JTextField txtCena;
private JSpinner spinner;
private JLabel lblFoto;
private Product biezacyProdukt;
private ImageIcon ikonaZeZdjeciem;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
OknoSoap window = new OknoSoap();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public OknoSoap() {
SklepService serwis = new SklepService();
proxy = serwis.getSklepPort();
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 841, 801);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
spinner = new JSpinner();
spinner.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
wyswietl();
}
});
spinner.setFont(new Font("Dialog", Font.BOLD, 22));
JLabel lblPodajIdOgoszenia = new JLabel("Podaj ID ogłoszenia");
lblPodajIdOgoszenia.setFont(new Font("Dialog", Font.PLAIN, 20));
JButton btnWywietl = new JButton("Wyświetl");
btnWywietl.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
wyswietl();
}
});
btnWywietl.setFont(new Font("Dialog", Font.BOLD, 20));
JPanel panel = new JPanel();
lblFoto = new JLabel("FOTO");
GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.TRAILING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(lblFoto, GroupLayout.DEFAULT_SIZE, 817, Short.MAX_VALUE)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(lblPodajIdOgoszenia)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(spinner, GroupLayout.PREFERRED_SIZE, 72, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, 437, Short.MAX_VALUE)
.addComponent(btnWywietl))
.addComponent(panel, GroupLayout.DEFAULT_SIZE, 817, Short.MAX_VALUE))
.addContainerGap())
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(lblPodajIdOgoszenia)
.addComponent(spinner, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(20))
.addGroup(groupLayout.createSequentialGroup()
.addComponent(btnWywietl)
.addPreferredGap(ComponentPlacement.UNRELATED)))
.addComponent(panel, GroupLayout.PREFERRED_SIZE, 155, GroupLayout.PREFERRED_SIZE)
.addGap(18)
.addComponent(lblFoto, GroupLayout.DEFAULT_SIZE, 523, Short.MAX_VALUE)
.addContainerGap())
);
JLabel lblTytu = new JLabel("Nazwa");
lblTytu.setFont(new Font("Dialog", Font.PLAIN, 18));
txtTytul = new JTextField();
txtTytul.setFont(new Font("Dialog", Font.BOLD, 16));
txtTytul.setColumns(10);
JLabel lblMarka = new JLabel("Opis");
lblMarka.setFont(new Font("Dialog", Font.PLAIN, 18));
txtMarka = new JTextField();
txtMarka.setFont(new Font("Dialog", Font.BOLD, 16));
txtMarka.setColumns(10);
JLabel lblCena = new JLabel("Cena");
lblCena.setFont(new Font("Dialog", Font.PLAIN, 18));
txtCena = new JTextField();
txtCena.setFont(new Font("Dialog", Font.BOLD, 16));
txtCena.setColumns(10);
GroupLayout gl_panel = new GroupLayout(panel);
gl_panel.setHorizontalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panel.createSequentialGroup()
.addContainerGap()
.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panel.createSequentialGroup()
.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING, false)
.addComponent(lblMarka, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lblTytu, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
.addComponent(txtMarka, GroupLayout.DEFAULT_SIZE, 623, Short.MAX_VALUE)
.addComponent(txtTytul, GroupLayout.DEFAULT_SIZE, 623, Short.MAX_VALUE)))
.addGroup(Alignment.TRAILING, gl_panel.createSequentialGroup()
.addComponent(lblCena)
.addGap(128)
.addComponent(txtCena, GroupLayout.DEFAULT_SIZE, 623, Short.MAX_VALUE)))
.addContainerGap())
);
gl_panel.setVerticalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panel.createSequentialGroup()
.addContainerGap()
.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
.addComponent(lblTytu)
.addComponent(txtTytul, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
.addComponent(lblMarka)
.addComponent(txtMarka, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(18)
.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
.addComponent(txtCena, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lblCena))
.addContainerGap(44, Short.MAX_VALUE))
);
panel.setLayout(gl_panel);
frame.getContentPane().setLayout(groupLayout);
}
// jest wywoływane przez Swinga po kliknięciu guzika itp.
// ta metoda jest wykonywana w wątku EDT
protected void wyswietl() {
int idOgloszenia = (Integer)spinner.getValue();
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
// to wykona się w oddzielnym wątku,
// nie zablokuj okna, ale tutaj nie powinniśmy korzystać z elementów okna
pobierzDane(idOgloszenia);
return null;
}
@Override
protected void done() {
// tu powinniśmy wpisać polecenia dotyczące okna, które mają być wykonane przez EDT po zakończeniu operacji
uaktualnijWidok();
}
};
worker.execute();
}
private void pobierzDane(int id) {
// ma być wykonane w tle
try {
ikonaZeZdjeciem = null;
biezacyProdukt = null;
biezacyProdukt = proxy.readOne(id);
try {
byte[] bajtyZeZdjeciem = proxy.getPhoto(id);
if(bajtyZeZdjeciem != null) {
ikonaZeZdjeciem = new ImageIcon(bajtyZeZdjeciem);
}
} catch (RecordNotFound e) {
// zdjecie zostaje nullem
}
} catch (DBException e) {
e.printStackTrace();
} catch (RecordNotFound e) {
}
}
private void uaktualnijWidok() {
// ma być wykonane przez okno (czyli wątek EDT)
if(biezacyProdukt != null) {
txtTytul.setText(biezacyProdukt.getProductName());
txtMarka.setText(biezacyProdukt.getDescription());
txtCena.setText(String.valueOf(biezacyProdukt.getPrice()));
} else {
txtTytul.setText("");
txtMarka.setText("");
txtCena.setText("");
}
lblFoto.setIcon(ikonaZeZdjeciem);
}
}
package sklep.klient;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import jakarta.xml.ws.Service;
import jakarta.xml.ws.WebEndpoint;
import jakarta.xml.ws.WebServiceClient;
import jakarta.xml.ws.WebServiceFeature;
import sklep.soap.Sklep;
@WebServiceClient(name="SklepService",
wsdlLocation=SklepService.ADRES_WSDL,
targetNamespace=Sklep.NAMESPACE)
public class SklepService extends Service {
final static String ADRES_WSDL = "http://localhost:8080/wielomodulowy-soap_serwer/SklepService?wsdl";
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName(Sklep.NAMESPACE, "SklepService");
public final static QName SklepPort = new QName(Sklep.NAMESPACE, "SklepPort");
static {
URL url = null;
try {
url = new URL(ADRES_WSDL);
} catch (MalformedURLException e) {
System.err.println("Can not initialize the default wsdl from " + ADRES_WSDL);
}
WSDL_LOCATION = url;
}
public SklepService(URL wsdlLocation) {
super(wsdlLocation, SERVICE);
}
public SklepService(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public SklepService() {
super(WSDL_LOCATION, SERVICE);
}
public SklepService(WebServiceFeature... features) {
super(WSDL_LOCATION, SERVICE, features);
}
public SklepService(URL wsdlLocation, WebServiceFeature... features) {
super(wsdlLocation, SERVICE, features);
}
public SklepService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
super(wsdlLocation, serviceName, features);
}
@WebEndpoint(name = "SklepPort")
public Sklep getSklepPort() {
return super.getPort(SklepPort, Sklep.class);
}
@WebEndpoint(name = "SklepPort")
public Sklep getSklepPort(WebServiceFeature... features) {
return super.getPort(SklepPort, Sklep.class, features);
}
}
...@@ -15,8 +15,11 @@ import sklep.model.Customer; ...@@ -15,8 +15,11 @@ import sklep.model.Customer;
import sklep.model.Order; import sklep.model.Order;
import sklep.model.Product; import sklep.model.Product;
@WebService(endpointInterface="sklep.soap.Sklep",
targetNamespace=Sklep.NAMESPACE,
serviceName="SklepService",
portName="SklepPort")
@MTOM @MTOM
@WebService(endpointInterface = "sklep.soap.Sklep")
public class SklepImpl implements Sklep { public class SklepImpl implements Sklep {
public List<Product> readAll() throws DBException { public List<Product> readAll() throws DBException {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment